6

そのため、以前は ActiveRecord を必要としなかったアプリケーションがあります。そのため、アプリケーションから ActiveRecord を削除し、ログを次のようにフォーマットしました。

application.rb で:

class DreamLogFormatter < Logger::Formatter
  SEVERITY_TO_COLOR_MAP   = {'DEBUG'=>'32', 'INFO'=>'0;37', 'WARN'=>'35', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}

  def call(severity, time, progname, msg)
    color = SEVERITY_TO_COLOR_MAP[severity]
    "\033[0;37m[%s] \033[#{color}m%5s - %s\033[0m\n" % [time.to_s(:short), severity, msg2str(msg)]
  end
end

class ActiveSupport::BufferedLogger
  def formatter=(formatter)
    @log.formatter = formatter
  end
end

開発中.rb

config.logger = Logger.new("log/#{Rails.env}.log")
config.logger.formatter = DreamLogFormatter.new
ActiveResource::Base.logger =  Logger.new("log/#{Rails.env}.log")
ActiveResource::Base.logger.formatter = DreamLogFormatter.new

注: 次のように ActiveResource 呼び出しの URL 出力が必要なため、ActiveResource ロガー構成が追加されました。

GET http://localhost:2524/users/
 --> 200 OK 239 (13.0ms)

この構成でログを記録すると、ActiveResource 呼び出しと を使用した独自のログの優れた出力の組み合わせが得られましたRails.logger

ただし、セッション ストレージを Cookie ストアから ActiveRecord ストアに変更する必要があったため、アプリケーションに ActiveRecord を追加し直す必要がありました。また、ActiveRecord を再度追加してから、ロギングが適切に機能しなくなりました。

以前のログ出力:

Started GET "/audit/?key1=value1&key2=value2" for 0:0:0:0:0:0:0:1%0 at 2012-08-15 15:39:58 -0400
[15 Aug 15:39]  INFO -   Processing by AuditController#index as HTML
[15 Aug 15:39]  INFO -   Parameters: {"utf8"=>"✓", "key1"=>"value1", "key2"=>"value2"}
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[15 Aug 15:39]  INFO - --> 200 OK 151 (55.0ms)
[15 Aug 15:39]  WARN - There is no user currently logged in - retrieving default theme.
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[15 Aug 15:39]  INFO - --> 200 OK 151 (35.0ms)

注:この形式で私が本当に気に入っているのは、各要求が aStarted GET <URL>または POST または PUT などで始まり、その後にどのコントローラーと関数が処理を行っているか、および送信されたパラメーターが何であるかが記録されることです。これは、デバッグに非常に役立ちます。また、この形式により、独自のRails.loggerログ情報を出力することができました。

現在のログ出力(ActiveRecord を使用) :

[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff
[20 Aug 11:40]  INFO - --> 200 OK 199 (144.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[20 Aug 11:40]  INFO - --> 200 OK 148 (12.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[20 Aug 11:40]  INFO - --> 200 OK 155 (15.0ms)

基本的に、現在得られるのは URL 呼び出しの絶え間ないストリームだけです。それは、そこから来るものは何もログに記録せずRails.logger、異なるリクエスト間の分離もありません。これは文字通り、URL と応答の 1 つの絶え間ないストリームです。


多くのブログが推奨するように設定しようとしActiveResource::Base.logger = ActiveRecord::Base.loggerましたが、それは事態を悪化させました-いくつかのURLをログに記録し、エラーレベルでない限りログを完全に停止しました(ログレベルをどこにも設定していないので、それでもデフォルトである)

どんな助けや提案も大歓迎です!! ありがとう

4

1 に答える 1

1

logrageの実​​装が役立つかもしれません:

https://github.com/roidrage/lograge/blob/master/lib/lograge.rb#L57

于 2012-12-13T01:44:08.040 に答える