Railsと遅延ジョブをサポートでき、セットアップが比較的簡単な、真に統合されたロギングシステムがあるかどうか疑問に思いました。
現在Railsコンテキストにいない場合でも、アプリケーションの実行コンテキスト(Rails、遅延ジョブなど)について同じサーバー/ファイルにログを記録できるようにしたい。
Railsロガーが大好きですが、Resqueジョブ中にログに記録できません。何か案は?
Railsと遅延ジョブをサポートでき、セットアップが比較的簡単な、真に統合されたロギングシステムがあるかどうか疑問に思いました。
現在Railsコンテキストにいない場合でも、アプリケーションの実行コンテキスト(Rails、遅延ジョブなど)について同じサーバー/ファイルにログを記録できるようにしたい。
Railsロガーが大好きですが、Resqueジョブ中にログに記録できません。何か案は?
syslogに似たファイルロガーを意味しますか?
ロガーはログローリングを実行でき、重大度レベルを処理し、ログ記録のために多くのRubyモジュールで使用されます。ログに記録するファイルの名前を定義するか、STDOUT/STDERRまたはIOストリームを使用できます。
syslogのドキュメントはかなり必要最低限のものですが、ソースコードを参照するか、RubySyslogREADMEを読むことで情報を入手できます。
resqueジョブによって実行されるgemで発生していることをログに記録する必要があります。Railsデータベースに何が起こっているかをログに記録するには、次のようにします。
#in gem:
class Foo
def self.logger
@@logger ||= Logger.new(nil)
end
def self.logger=(logger)
@@logger = logger
end
def self.logger_reset
self.logger = Logger.new(nil)
end
def self.logger_write(obj_id, message, method = :info)
self.logger.send(method, "|%s|%s|" % [obj_id, message])
end
end
#in rails in initializers
Foo.logger = MyRailsLogger.new
#in in rails in lib or in model if it uses ActiveRecord
class MyRailsLogger
def info
...
end
...
end
このようにして、さまざまなプロセスで発生していることをログに記録し、Fooインスタンスのobject_idでログをフィルタリングできるため、関連するデータのみがログに記録されます。