ユーザ用ツール

サイト用ツール


alworker:ロギング

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 )

(注意)内部処理の都合上、コンストラクタですべき事とイニシャライザですべき事が混在しています。

alworker/ロギング.txt · 最終更新: 2023/08/15 10:45 by hirohito