【Java】【log4j】Java で イベントログ を出力するには ~Log4j編~

■ はじめに

http://blogs.yahoo.co.jp/dk521123/33192139.html
で、イベントログの出力について、調べたが、Log4jを使って実装可能らしいので実際に試してみた。

!注意! ただし、まだ未完。以下の例外が発生し実行できない。

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.log4j.nt.NTEventLogAppender.registerEventSource(Ljava/lang/String;Ljava/lang/String;)I
	at org.apache.log4j.nt.NTEventLogAppender.registerEventSource(Native Method)
	at org.apache.log4j.nt.NTEventLogAppender.<init>(NTEventLogAppender.java:77)
	at org.apache.log4j.nt.NTEventLogAppender.<init>(NTEventLogAppender.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:330)
	at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:121)
	at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:664)
	at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
	at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
	at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
	at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:334)
	at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:342)
	at com.webservices.EventLogWithLog4j.main(EventLogWithLog4j.java:12)

■ 環境設定

 [1] 以下のサイトから、Log4Jのモジュールをダウンロードする(例えば「log4j-1.2.17.zip」)
http://logging.apache.org/
 [2] ダウンロードしたファイルを解凍する

  + apache-log4j-1.2.17
    |
    +- NTEventLogAppender.amd64.dll (WinOS64Bit用)
    |
    +- NTEventLogAppender.dll (WinOS32Bit用)
    |
    +- log4j-1.2.17.jar

 [3] %SYSTEMROOT%\SYSTEM32配下 (例「C:\WINDOWS\system32」)に、
     ダウンロードしたNTEventLogAppenderのDLLファイルを配置(コピペ)しておく

 [4] Eclipseにおいて、対象とするプロジェクトを右クリックし、
      [Properties]-[Java Build Path]-[Libraries]-[Add External JARs]を選択

 [5] 手順[2]で解凍したzipで、log4jのJARファイル(例「log4j-1.2.17.jar」)を選択し「ok」押下 

■ サンプル

log4j.properties

log4j.rootCategory=DEBUG, EventLogger
log4j.appender.EventLogger=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.EventLogger.Name=WindowsEventLog
log4j.appender.EventLogger.layout.ConversionPattern=%-5p %d{ISO8601} - %m%n

EventLogWithLog4j.java

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class EventLogWithLog4j {
   private static Logger logger = 
         Logger.getLogger(EventLogWithLog4j.class.getName());
   
   public static void main(String[] args) {
      PropertyConfigurator.configure("./conf/log4j.properties");
      EventLogWithLog4j.logger.error("Hello World!!");
   }
}