- PR -

log4j1.2.8のNTイベントログについて

1
投稿者投稿内容
あか
会議室デビュー日: 2007/10/22
投稿数: 3
投稿日時: 2007-10-22 14:43

weblogicに入っているlog4j1.2.8.jarの動作について

Q
 ・log4j1.2.8を利用してWindowsのイベントログへ書き込みを行っているが
 アプリケーション動作としてWindowsイベントログへの書き込みは成功するが
 アプリの更新(アンデプロイ・デプロイ)後ログを出力すると
 java.lang.UnsatisfiedLinkError:
 Native Library C:\\WINDOWS\\system32\\NTEventLogAppender.dll already loaded in another classloader
 が発生しログの出力を行いません。
 
 こちらではWebLogicServerを再起動することにより上記エラーを回避する
 ことは確認しているが、WebLogicServerを再起動せずにアプリの更新(アンデプロイ・デプロイ)
 での回避方法を教えてください。
 
 
 
 ○ログ出力クラスについて
 上記エラーはアプリの更新(アンデプロイ・デプロイ)後ログ出力クラスで
 XMLファイルの読み込みを行ったとき発生する。
 XMLファイルの読み込みはDOMConfiguratorを使用している。
 
 ○動作環境
 サーバー:Windows2003Server
 Weblogic :Weblogic Server 9.2.1
 
 log4j:Workshopへ動的Webプロジェクトを作成したとき追加されるlog4j1.2.8.jarを使用している。
 ログの出力:ログの出力はXMLファイルを読み込み出力を行っている。
 
 ○前提条件
 ・C:\\WINDOWS\\system32へNTEventLogAppender.dllを格納している。
 ・NTEventLogAppender.dllはJakarta
 
 ○備考
 ・上記現象はXMLへWindowsイベントログの出力設定がされているときのみ発生します。
 ・XMLのWindowsイベントログの出力設定がされていない場合はアプリの更新(アンデプロイ・デプロイ)
  後でも正常に動作します。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-10-23 11:22
jniでDLLを2重読み込みをしているのが問題の様です。
log4jのjarをWARやEARの形ではなく、weblogicの共通のクラスパスから一回だけ読み取るる様に配置すべきでしょう。
あか
会議室デビュー日: 2007/10/22
投稿数: 3
投稿日時: 2007-10-23 16:10
Anthyhimeさん ありがとうございます

EARからlog4jを除去して共通のクラスパスへlog4jを設定することにより
エラーを回避することができました。 ありがとうございます。

そのあと実験しドメインのlibにlog4jを格納することによりエラーを回避すること
も確認しました。

EARの中にlog4jを入れるとアプリのクラスローダーがlog4jの読み込みを行いアプリの更新(アンデプロイ・デプロイ)を行うことにより2回目のlog4jの読み込みが発生しjniでDLLをもう一度読み込んでしまうため問題が発生するようで
共通のクラスパスから1回だけ読み込むことによりクラスローダの読み込みが1度しか発生しないため回避できるんですね

ご協力感謝します。
1

スキルアップ/キャリアアップ(JOB@IT)