如何让 Rails 应用程序的每个独角兽工作者写入不同的日志文件?
原因:混合日志文件的问题......
在默认配置中,Rails 会将其日志消息写入单个日志文件:log/<environment>.log
.
Unicorn 工作线程会同时写入同一个日志文件,消息可能会混淆。当 request-log-analyzer 解析日志文件时,这是一个问题。一个例子:
Processing Controller1#action1 ...
Processing Controller2#action2 ...
Completed in 100ms...
Completed in 567ms...
在这个例子中,什么动作在 100 毫秒内完成,什么动作在 567 毫秒内完成?我们永远无法确定。
将此代码添加到 unicorn.rb 中的 after_fork 中:
#one log per unicorn worker
if log = Rails.logger.instance_values['log']
ext = File.extname log.path
new_path =log.path.gsub %r{(.*)(#{Regexp.escape ext})}, "\\1.#{worker.nr}\\2"
Rails.logger.instance_eval do
@log.close
@log= open_log new_path, 'a+'
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)