Jes*_*ham 5 logging stdout ruby-on-rails stderr unicorn
我希望能够在我的配置文件中使用 Rails 日志指定类似的内容:
logger(STDOUT).level = [:debug, :info, :warn]
logger(STDERR).level = [:error, :fatal]
Run Code Online (Sandbox Code Playgroud)
以便我的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'
Run Code Online (Sandbox Code Playgroud)
此外,它还有几个很酷的选项。
编辑:这是我的研究结果:
轨道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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |