4

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

どんな助けでも大歓迎です

4

1 に答える 1

2

@Leonsが言及しているように、同じ問題が問題#26としてプロジェクトに報告されました。投稿者は、テストケースを含むパッチを作成し、問題 #27 にログインして、add メソッドのインターフェイスを通常の定義と同一にするための修正を含むプル リクエストを作成しました。

これは 2014 年 12 月 22 日に統合されました。それ以降、新しいリリースは作成されていません。

次のようなものを使用して、github リポジトリから直接コンパイルするのが最善だと思います。

$ echo "gem 'gelf', :git => 'https://github.com/Graylog2/gelf-rb.git'" >>Gemfile
$ bundle install

または類似。

幸運を。

于 2015-07-20T19:27:56.397 に答える