====== AlWorker ロギング ======
require "al_worker"
----
Ruby標準のLoggerクラスを使って、ログをとります。\\
デフォルトで、/tmp以下にログファイルを作ります。\\
ファイル名は、コンストラクタに指定した名前+.logです。
===== ログの記録 =====
#!/usr/bin/env ruby
require "al_worker"
class Worker1 < AlWorker
def idle_task()
log("Info level log" )
log("Specify severity", :fatal )
log("Specify progname", :info, "PROGNAME" )
raise "User runtime error."
rescue =>ex
log( ex )
end
end
worker1 = Worker1.new("sample_log")
worker1.run(:exit_idle_task)
実行結果
cat /tmp/sample_log.log
# Logfile created on 2026-06-17 14:27:33 +0900 by logger.rb/v1.6.4
I, [2026-06-17T14:27:33.078994 #22627] INFO -- sample_log: start
I, [2026-06-17T14:27:33.079165 #22627] INFO -- : Info level log
F, [2026-06-17T14:27:33.079220 #22627] FATAL -- : Specify severity
I, [2026-06-17T14:27:33.079245 #22627] INFO -- PROGNAME: Specify progname
E, [2026-06-17T14:27:33.079280 #22627] ERROR -- : RuntimeError / User runtime error.
E, [2026-06-17T14:27:33.079312 #22627] ERROR -- : BACKTRACE:
sample_log.rb:10:in 'Worker1#idle_task'
/Users/hirohito/tst/alone-release3.9/alone/lib/al_worker.rb:754:in 'block in AlWorker#run'
I, [2026-06-17T14:27:33.079496 #22627] INFO -- sample_log: finish
===== 解説 =====
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()
記録するログレベルの変更は、以下の通り行うことができます。\\
デフォルトでは、INFO もしくは DEBUG です。
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 )
(注意)内部処理の都合上、コンストラクタですべき事とイニシャライザですべき事が混在しています。