如何让我的Rails应用程序的每个独角兽工作者登录到另一个文件?

Nic*_*yer 9 logging ruby-on-rails worker unicorn

如何让我的Rails应用程序的每个独角兽工作者在另一个日志文件中写入?

原因:混合日志文件的问题...在其默认配置中,Rails会将其日志消息写入单个日志文件:log/<environment>.log.

Unicorn工作人员会立即写入同一个日志文件,这些消息可能会混淆.当request-log-analyzer解析日志文件时,这是一个问题.一个例子:

Processing Controller1#action1 ...
Processing Controller2#action2 ...
Completed in 100ms...
Completed in 567ms...
Run Code Online (Sandbox Code Playgroud)

在此示例中,在100毫秒内完成了什么操作,在567毫秒内完成了什么操作?我们永远无法确定.

小智 3

将此代码添加到 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
Run Code Online (Sandbox Code Playgroud)