log4jとイベントログ その2

以前log4jのNTEventLogAppenderよりlog4jnaを使うのがいいと書いた。
ところがその後そうでもないことが判明。


dllを準備しなくていいのでNTEventLogAppendarより簡単だと思っていたのだが、dllなしでwindows依存の処理はどうしているのか気になっていた。
実際のところはdllを使っていないのではなく、jarの中にdllを入れておいて実行時にそれをテンポラリファイルに抽出してロードするという無茶なことをやっている。
テンポラリファイルのdllはvm終了時に削除しているのだが、webシステムではうまく動かないらしく、起動するたびにdllが増えていく。これは困ったチャンだな・・・


結局はjar内のjnidispatch.dllをあらかじめシステムディレクトリやカレントディレクトリなどロード可能な場所に置くしかない。
log4jnaのサイトにはdll不要ですというような記述があるが・・・
手間はNTEventLogAppendarと同じようなものか。
jarが増える分こっちの方が手間か。


どうもjna.jarがカスタムクラスローダでロードされると抽出したdllが削除できないようなので、ブートストラップクラスパスに含めれば問題ないかもしれない。