log4jとイベントログ

log4jWindowsのイベントログに出力するNTEventLogAppenderは良く知られていることだと思う。
知ってるだけで使ったことは無かったので、さてWindowsネイティブな部分はどうなってるのかいなと思ったら、System32ディレクトリにdllを一つ置くだけで使える。
よく知らないがjniというのを使ってるのかな?


自分の端末で開発してる分にはそれで良かったのだが検証端末では動かなかった。
それというのも64ビットOSのせい。
32ビット用のdllは使えないよ的なエラーがでる。
64ビット用のdllはどこかで提供されているのかと思って調べてみたがどこにも無い。
古いバージョンのものなら公式サイトにあるんだが、なぜすべてのバージョンでないのか?
dllのソースはそれ以降変更されて無いということなのかな?
dllのソースだけなら今のバージョンのアーカイブにも入ってるのだが、自分でビルドしなきゃいけないのか?


googleの検索結果をずーっと後のほうまで調べてようやく解決策を見つける。
今はlog4jnaというものがあるようだ。
専用のdllを必要とせず、WindowsAPIを直接javaから呼べるjnaという仕組みを使っている。
これは32ビット、64ビット両方で使える。
NTEventLogAppenderより簡単なのに、なぜgoogleの検索結果でイベントログに出力する方法を検索するとNTEventLogAppenderばかり出てくるのか・・・
log4jnaという言葉を知らなければまず調べようが無いんじゃないか?


日本語の情報はまったく無い。
まあjarを3つクラスパスに入れるだけだから、説明も何も要らないような気はするが。
tomcat上で使う場合はcommon/libに入れるようにとあるが、複数のアプリケーションで使うのでなければWEB-INF/libでもかまわない。
試してはいないので想像だが、これらをcommon/libに入れるとlog4j自体もcommon/libに入れなきゃいけないような気がする。
そうするとlog4j.propertiesとかlog4j.xmlはアプリケーションごとには用意できないよな・・・
どうすんだろか・・・


こっちも見てね。