| TOP>>OBAQ>>ロギング | 概略 | ツアー | <OBAQ> | 構成定義 | アプリケーションサーバ | リファレンス | サイトマップ |
ファイルへの出力下記のような設定をすると、全てのログがファイル(sample1.log)に出力されます。 Log::setup_inline <<-END
LogControler
LogOutputFile out1 sample1.log
LogConfig ""
output=out1
END同じコマンドをファイルに書いて、そのファイルをLog::setup_fileで読みこんでも同じです。 ファイルとコンソールの使いわけ複数の出力先を設定して、それをカテゴリごとに使いわけることもできます。 Log::setup_inline <<-END
LogControler
LogOutputStdout console
LogOutputFile file sample1.log
LogConfig "msg"
output=console
LogConfig "file"
output=file
END
log1 = Log::lgc.get_category("msg")
log1.info("message to console") # コンソールに出力される
log2 = Log::lgc.get_category("msg.subcategory.a")
log2.info("message to console") # コンソールに出力される
log3 = Log::lgc.get_category("file")
log3.info("message to file") # ファイルに出力される
log4 = Log::lgc.get_category("file.subcategory.b")
log4.info("message to file") # ファイルに出力されるファイルとコンソール両方に出力するログ出力先の設定は、インデントのレベルで階層化されています。 Log::setup_inline <<-END
LogControler
LogOutputStdout console
LogOutputFile both sample1.log
LogConfig "msg"
output=console
LogConfig "file"
output=both
ENDこのように、LogOutputFileの行のインデントを下げると、 「LogOutputFile both」は「LogOutputStdout console」の下位のオブジェクトになります。 下位オブジェクトへの出力は、そのまま上位へも転送されます。 そのため、カテゴリー file.xxx.xxxに対する出力(つまり output=bothに対する出力)は ファイルに出力された後にコンソールへ出力されます。 次のように両者の上下関係を反対にすると、 LogOutputFile file sample1.log LogOutputStdout console output=fileのカテゴリに対するログはファイルのみ、 output=consoleのカテゴリに対するログはファイルとコンソール両方に出力されます。 出力項目を指定するSimpleLayoutというのはログ出力オブジェクトですが、 実際の出力は行なわず、メッセージフォーマットを設定して上位に転送するだけのオブジェクトです。 これを利用すると、出力内容を指定することができます。 Log::setup_inline <<-END
LogControler
LogOutputStdout
SimpleLayout console
filename lno method
LogConfig "msg"
output=console
END
出力結果
log2.rb:100:main:message to consoleSimpleLayoutもLogOutputFile等と同じように、 複数の設定ができます。 次の例は、コンソールメッセージには時間を付加し、 デバッグメッセージには、ファイル名と行番号とメソッド名を付加する例です。 def Sample5.main
Log::setup_inline <<-END
LogControler
LogOutputStdout
SimpleLayout msg
time
SimpleLayout debug
filename lno method
LogConfig msg
output=msg
LogConfig debug
priority=LOG_DEBUG
output=debug
END
msg = Log::lgc.get_category("msg")
msg.info("message")
debug = Log::lgc.get_category("debug")
debug.debug("debug log")
end
出力結果
2001/05/23 23:53:19:message
log2.rb:128:main:debug log応用例カテゴリごとに出力先とフォーマットを両方指定した場合です。 Log::setup_inline <<-END
LogControler
LogOutputFile file sample1.log
SimpleLayout #a
time filename lno method reformat
LogOutputStdout
SimpleLayout msg #b
time
SimpleLayout debug #c
filename lno method
LogConfig msg
output=msg
LogConfig debug
priority=LOG_DEBUG
output=debug
END
tnaka@rymoa log]$ ruby log2.rb
2001/05/23 23:59:17:message #1
[tnaka@rymoa log]$ cat sample1.log
2001/05/23 23:59:17:log2.rb:156:main:message #2
log2.rb:159:main:debug log #3コンソール出力(カテゴリ=msg)のメッセージは #bに送られます。 ここで、時刻を付加されその上位でコンソールに出力されます。 さらに、その上位(#b)でフォーマットを変更してから、 上位のファイル出力(sample1.log)に送られます。 その結果、ファイルには#2のように行番号等を付加されて出力されています。 ファイル出力は、#cのフォーマットに従い、#3のようにファイルに出力されます。 |