I used to do puts 'text'
in order to have a look at the flow of my code. I decided to, instead of doing that, use the logger.debug 'text'
.
However, I don't see any text outputed in the terminal where I have run rails s. What am I missing here?
logger. debug , or in short logger. debug writes the parameter text to a log file. This log file is by default environment specific. If you are currently running rails in development environment then the log file in use is log/development.
INFO is used to log the information your program is working as expected. DEBUG is used to find the reason in case your program is not working as expected or an exception has occurred. it's in the interest of the developer.
A debug log can record database operations, system processes, and errors that occur when executing a transaction or running unit tests. Debug logs can contain information about: Database changes. HTTP callouts.
In a Rails app, logs are stored under the /log folder. In development mode, the development. log file is used & you see log output on the terminal you're running rails server on.
You're definitely headed the right direction in using logger.debug
instead of puts
as puts
is more for command line applications.
Rails.logger.debug
, or in short logger.debug
writes the parameter text to a log file. This log file is by default environment specific. If you are currently running rails in development
environment then the log file in use is log/development.log
.
If you open the file log/development.log
, you will find the debug text text
in there. To see the log output as they are written to the file, you can use the tail
command (if you are in unix system) as follows in a new terminal with present working directory as your rails application root:
$ tail -f log/development.log
The quick answer: The right way to debug your application is to print it to your logs (Try to avoid from scripts doing puts 'your message'
,instead, use Rails.logger.info "your message"
as best practice.
Explanation: You have 4 types of loggers according to your environment config (production/staging/development/test), that are located in /logs
. For example if you're debugging RAILS_ENV=test rails s -p 5000
you would find it in <yourApplicationPath>/log/test.log
The available log levels are: :debug, :info, :warn, :error, :fatal,
and :unknown
, corresponding to the log level numbers from 0 up to 5, respectively.
To write in the current log use the logger.(debug|info|warn|error|fatal|unknown) method from within a controller, model, or mailer:
Rails.logger.debug "Person attributes hash: #{@person.attributes.inspect}"
Rails.logger.info "Processing the request..."
Rails.logger.fatal "Terminating application, raised unrecoverable error!!!"
In this way you can grep and filter the right levels and insert some logic to your debugging process. Read rails documentation for more details:
logger.debug 'text'
would log the text in the environment logger file. If you are in development
environment then you can see the logs in log/development.log
.
To see the logs on console,
For example: In development environment you can update the config/environments/development.rb
file as below:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG ## set the appropriate log level like DEBUG, INFO, WARN, ERROR, FATAL
Or
You can directly read from the environment log file like Vee suggested
tail -f log/development.log
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With