Rails 3.2.12/Ruby 1.9.3 を使用しており、複数のロガーをセットアップしようとしています。これにより、セットアップしたファイルとグレーログ サーバーの両方にログを記録できます。私はこのソリューションを使用して近づいていますが、Gelfロガーを使用しています - http://railsware.com/blog/2014/08/07/rails-logging-into-several-backends/
そのため、構成/初期化子に移植し、ActiveSupport::Logger
以下のようにゲルフ ロガーをセットアップしました。
(development.rb)
gelf_logger = GELF::Logger.new("greylogserver", 12201, "WAN", { :host => 'host', :facility => "railslog"})
Rails.logger.extend(ActiveSupport::Logger.broadcast(gelf_logger))
ただし、グレイログサーバーに記録されたエラーのみが表示されることがわかりました
ArgumentError: short_message is missing. Options version, short_message and host must be set.
コードをデバッグすると、Gelf Loggeradd
メソッド (以下) に渡される引数が常にレベルとして 1 番目の要素を持ち、2 番目は nil で、3 番目にはメッセージが含まれていることがわかります。2 番目の引数がメッセージで、3 番目の引数がプログラム名であるため、これは混乱を招きます。私が思いついた唯一の解決策は、メッセージに args[1] を使用するように 6 行目を変更して Gelf-rb gem を (以下のように) 変更することですが、これは理想的ではなく、修正する方法が必要です。これは私のコードで。
def add(level, *args)
raise ArgumentError.new('Wrong arguments.') unless (0..2).include?(args.count)
# Ruby Logger's author is a maniac.
message, progname = if args.count == 2
[args[1], args[1]]
elsif args.count == 0
[yield, default_options['facility']]
elsif block_given?
[yield, args[0]]
else
[args[0], default_options['facility']]
end
....
Railsロガーをdevelopment.rbでGelfロガーを使用するように直接設定すると、正常に動作することに注意してください
Rails.logger = GELF::Logger.new("greylogserver", 12201, "WAN", { :host => 'host', :facility => "railslog"})
したがって、ここからの私の実装と関係がある必要がありActiveSupport::Logger
ます- https://github.com/rails/rails/blob/6329d9fa8b2f86a178151be264cccdb805bfaaac/activesupport/lib/active_support/logger.rb
どんな助けでも大歓迎です