2014年9月22日月曜日

log4j でWindows Event Log を書く

まず、↓から、log4j をダウンロードします。

http://logging.apache.org/log4j/2.x/download.html

適当なところに解凍します。
以下のディレクトリに、Jar ファイルがあるので、それを自分のJava プロジェクトのlib フォルダ辺りに配置してください。

また、同様に以下のディレクトリに、NTEventLogAppender (※1) というクラスを利用するためのdll ファイルがあるので、
それもlib フォルダ辺りに配置してください。
Eclipse で実行時、Debug Configuration > VM arguments で、以下を指定してください。
-Djava.library.path=<dll を配置したところのパス>

次に、log4j.properties ファイルを作成します。

後は、LoggingEvent (※2)クラスを適当に作ってあげて、NTEventLogAppender クラスのappend メソッドの引数に与えて上げる。
また、LoggingEvent クラスのコンストラクタの引数は、ある程度正しい値(例えば、timestamp であったら、現在時刻のlong 値、など)を入れてあげないと、Windows Event Log に正しく登録できない。 以下に、1例を示す。
LoggingEvent event = new LoggingEvent( null, logger, level, message, null );
NTEventLogAppender appender = new NTEventLogAppender( "ServiceName", new PatternLayout( "%m%n" ) );
this.appender.append( event );

これで、Windows Event Log が書き込みできたので、CTRL+R > eventvwr で、EventLog を確認できます。
以下に、利用したlog4j.properties ファイルを添付する。
# Logger Root
log4j.rootLogger=INFO,stdout,debuglog
# Logger OperationLog
log4j.logger.operation=DEBUG
# Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p][%d{MM/dd/yyyy HH:mm:ss:SSS}] %m (%c) %n
# Debug
log4j.appender.debuglog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debuglog.encoding=UTF-8
log4j.appender.debuglog.layout=org.apache.log4j.PatternLayout
log4j.appender.debuglog.layout.ConversionPattern=%p,%d{MM/dd/yyyy HH:mm:ss:SSS},%c,%m,%n
log4j.appender.debuglog.File=logs/debug.log
log4j.appender.debuglog.DatePattern='.'yyyyMMdd


※1 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/nt/NTEventLogAppender.html
※2 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/LoggingEvent.html

0 件のコメント:

コメントを投稿