【发布时间】:2014-03-13 17:44:24
【问题描述】:
我曾经使用puts 'text' 来查看我的代码流程。我决定不这样做,而是使用logger.debug 'text'。
但是,我在运行 rails 的终端中没有看到任何文本输出。我在这里错过了什么?
【问题讨论】:
标签: ruby-on-rails logging
我曾经使用puts 'text' 来查看我的代码流程。我决定不这样做,而是使用logger.debug 'text'。
但是,我在运行 rails 的终端中没有看到任何文本输出。我在这里错过了什么?
【问题讨论】:
标签: ruby-on-rails logging
使用logger.debug 而不是puts 绝对是正确的方向,因为puts 更适合命令行应用程序。
Rails.logger.debug,或简而言之logger.debug 将参数文本写入日志文件。默认情况下,此日志文件是特定于环境的。如果您当前在development 环境中运行rails,那么正在使用的日志文件是log/development.log。
如果您打开文件log/development.log,您会在其中找到调试文本text。要查看写入文件时的日志输出,您可以在新终端中使用tail 命令(如果您使用的是 unix 系统),并将当前工作目录作为您的 rails 应用程序根目录:
$ tail -f log/development.log
【讨论】:
快速回答:调试应用程序的正确方法是将其打印到日志中(尽量避免使用 puts 'your message' 的脚本,而是使用 Rails.logger.info "your message" 作为最佳实践。
说明:根据您的环境配置(生产/暂存/开发/测试),您有 4 种类型的记录器,它们位于 /logs。例如,如果您正在调试 RAILS_ENV=test rails s -p 5000,您会在 <yourApplicationPath>/log/test.log 中找到它
可用的日志级别有::debug, :info, :warn, :error, :fatal, 和:unknown,分别对应从 0 到 5 的日志级别编号。
要写入当前日志,请使用控制器、模型或邮件程序中的 logger.(debug|info|warn|error|fatal|unknown) 方法:
Rails.logger.debug "Person attributes hash: #{@person.attributes.inspect}"
Rails.logger.info "Processing the request..."
Rails.logger.fatal "Terminating application, raised unrecoverable error!!!"
通过这种方式,您可以 grep 和过滤正确的级别,并将一些逻辑插入到您的调试过程中。阅读 railsdocumentation 了解更多详情:
【讨论】:
logger.debug 'text' 会将文本记录在环境记录器文件中。如果您在development 环境中,那么您可以在log/development.log 中看到日志。
要在控制台上查看日志,
例如:在开发环境中你可以更新config/environments/development.rb文件如下:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG ## set the appropriate log level like DEBUG, INFO, WARN, ERROR, FATAL
或者
你可以像 Vee 建议的那样直接从环境日志文件中读取
tail -f log/development.log
【讨论】: