如何让Rails在日志语句中显示标准有用信息?

我是Ruby / Rails编程的新手,仍然找到了我的方法。 我按照教程创建了一个示例Web应用程序。 它工作正常。 它使用Ruby版本1.9.3和Rails版本4.0.8。

但是我想实现日志记录。 所以我将以下lineq插入到我的一个控制器中:

logger.debug "Hello! I'm a DEBUG message" logger.info "Hello! I'm an INFO message" 

这产生了以下日志:

 Hello! I'm a DEBUG message Hello! I'm an INFO message 

这不太有帮助。 我想在日志输出中看到更多细节。 这个日志什么时候创建的? 日志级别是多少? 这个日志的文件名和行号是多少? 我想看到所有这一切。

所以我通过使用以下内容创建文件config / initializers / logger.rb来实现此处描述的解决方案:

 class Logger::SimpleFormatter def call(severity, time, progname, msg) "[#{severity} #{time} #{caller(0).first.match(/.*:\d+/)[0]}] #{msg}\n" end end 

但它没有任何区别。 日志线仍然是裸露的,没有我正在寻找的任何其他基本信息。 如何解决这个问题? 为什么不创建我的logger.rb有什么影响?

在Rails 4中,所有模式( production除外)的默认记录器是ActiveSupport::Logger::SimpleFormatter 。 请参阅此处的文档: http : //guides.rubyonrails.org/configuring.html#rails-general-configuration

所以,你的logger.rb需要是:

 class ActiveSupport::Logger::SimpleFormatter def call(severity, time, progname, msg) "[#{severity} #{time} #{caller(0).first.match(/.*:\d+/)[0]}] #{msg}\n" end end 

请注意,这在生产模式下无效。 对于production ,如果需要,您必须自定义Logger::Formatter

我真诚地不明白为什么登录rails是如此“裸”。 默认的记录器使用轨道甚至更好,但是轨道使其进一步下降。

需要记录的东西:

  • 时间戳
  • 严重
  • 首选主机进程(用于连接多个日志文件)

有一些很好的选择,你可以看看:

  • log4r :一个强大的记录器,我已经使用了几次,但没有记录得很好。 还不确定它是否仍然保持。
  • 最近我继续使用function稍差的better_logging ,但需要更少的配置才能开箱即用,默认情况下完全符合我的需求(而自定义字符串选项则是最后的选择)。