我希望能够在我的配置文件中使用rails日志指定类似这样的内容:
logger(STDOUT).level = [:debug, :info, :warn]
logger(STDERR).level = [:error, :fatal]
所以,我unicorn_app_server_stdout.log
和unicorn_app_server_stderr.log
与正确的信息(已诊断的stdout
和错误的stderr
),我相信这是一个相当长期的模型的Unix
但所有的导轨导我似乎找到了谈定义为记录仪logger.new(STDOUT)
或logger.new(STDERR)
却不能在一起
大多数网络服务器具有的这种情况下stderr
,并stdout
但似乎只轨具有的概念stdout
或stderr
却不能在一起这是正确的?我是否需要使用另一个日志记录gem来获得此功能?还是可以使用标准导轨来做到这一点?如果可以,怎么办?
几个月前,我以相同的目标研究了这个主题。现在,我再次去调查,得出的结论是我采取了正确的行动。
我使用yell-rails gem,它是gem yell的包装。
它非常容易安装并完成工作:
gem 'yell-rails'
到Gemfilerails generate yell: install
config/yell.yml
用于生产:
production:
:adapters:
- :file:
:level: 'lte.warn'
:filename: 'log/warn.log'
- :file:
:level: 'gte.error'
:filename: 'log/error.log'
另外,它还有几个不错的选择。
编辑:这是我研究的结果:
Rails 3.2
由于Rails使用Rails.logger记录其信息,因此它提供了一个setter以便在其位置使用其他记录器。在Rails 3.2中,记录器是一个类实例变量@@logger
,然后在应用程序中仅允许一个记录器。
在应用程序引导时,记录器设置有ActiveSupport :: TaggedLogging实例,该实例是ActiveSupport :: BufferedLogger的包装,最后一个使用std-lib的ruby Logger。
要将日志发送到控制台,它使用中间件:Rails :: Rack :: LogTailer
此时,您可以打开所有这些类(TaggedLogging,BufferedLogger,Logger)并编写一些代码以使其按预期运行,从而获得成就,或者可以用Rails提供的工具替换记录器。
滑轨4
不再使用BufferedLogger,并且使用ActiveSupport :: Logger <Logger代替Logger Rails。它包括一个广播的类方法,该方法允许增加记录器。此方法也用于将日志发送到控制台。
我试用了这些设置,并放入了一个初始化程序,将其作为让您实现目标的起点:
warn = ActiveSupport::Logger.new('log/logfilewarn.log')
warn.level = Logger::DEBUG
Rails.logger.extend(ActiveSupport::Logger.broadcast(warn))
error = ActiveSupport::Logger.new('log/logfileerror.log')
error.level = Logger::ERROR
Rails.logger.extend(ActiveSupport::Logger.broadcast(error))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句