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

时间:2014-07-07 07:37:28

标签: ruby-on-rails logging

我是Ruby / Rails编程的新手,仍然找到了自己的方式。我已按照this教程创建了一个示例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来实现描述here的解决方案:

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

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

2 个答案:

答案 0 :(得分:1)

在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

答案 1 :(得分:0)

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

我在记录时需要的东西

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

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

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