====== AlWorker ロギング ====== require "al_worker" ---- Ruby標準のLoggerクラスを使って、ログをとります。\\ デフォルトで、/tmp以下にログファイルを作ります。\\ ファイル名は、コンストラクタに指定した名前+.logです。 ===== ログの記録 ===== class Worker1 < AlWorker def func1() log( "Info level log" ) log( "Specify severity", :fatal ) log( "Specify progname", :info, "PROGNAME" ) rescue =>ex log( ex ) end end ===== 解説 ===== log() メソッドに、文字列のみ与えると、Info レベルのログが記録されます。\\ 第2引数に、severity が指定できます。指定できる値は以下のとおりです。\\ * :fatal * :error * :warn * :info * :debug 第3引数に、ログ文字列に追加するプログラム名を指定できます。\\ 第1引数に例外オブジェクトを指定した場合、例外内容とバックトレースが記録されます。\\ デフォルトで、ログサイズ 1048576バイト以上になるとログをローテートし、過去ログを3代保存します。\\ (注意)コンストラクタでは、ログ記録ができません。 ===== アレンジ ===== ログファイル名の変更は、Workerオブジェクトのlog_filenameアトリビュートを変更することで行えます。 def initialize(*arg) @log_filename = "/var/log/prog.log" end または、 worker1 = Worker1.new() worker1.log_filename = "/var/log/prog.log" worker1.daemon() ログレベルの変更は、以下の通り行うことができます。 def initialize2() log.level = Logger::ERROR end @@log変数にLoggerオブジェクトを代入することで、任意のログに変更できます。 def initialize(*arg) @@log = Logger.new("/var/log/prog.log", 16 ) @@log.level = Logger::DEBUG super end Syslogでログを取得する場合 require "syslog/logger" def initialize(*arg) super @@log = Syslog::Logger.new( @name ) end STDERRへログを表示する場合 def initialize(*arg) @@log = Logger.new(STDERR) @@log.level = Logger::DEBUG super end ログが不要の場合は、@@logにfalseを指定するか、run()/daemon()メソッドに:nologパラメータを与えます。 def initialize(*arg) super @@log = false end worker.run( :nolog ) (注意)内部処理の都合上、コンストラクタですべき事とイニシャライザですべき事が混在しています。