私の地元では、
そのように構成するためにlog4j2.xmlを作成しました。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
<FastFile name="AsyncFastFile" fileName="${sys:logFilename}"
immediateFlush="false" append="true">
<PatternLayout>
<pattern>test %m %m %ex%n</pattern>
</PatternLayout>
</FastFile>
<JDBC name="databaseAppender" tableName="mytablename">
<DriverManager url="jdbc:oracle:thin:ORCL_USERNAME/PASS@//MYSERVERNAME:PORTNO/DBNAME" />
<Column name="KEY1" pattern="%X{sayi1}" />
<Column name="KEY2" pattern="%X{sayi2}" />
</JDBC>
<JDBC name="databaseAppenderJNDI" tableName="mytablename">
<DataSource jndiName="java:/comp/env/jdbc/logWS" />
<Column name="KEY1" pattern="%X{sayi1}" />
<Column name="KEY2" pattern="%X{sayi2}" />
</JDBC>
</appenders>
<loggers>
<!-- pattern layout actually uses location, so we need to include it -->
<asyncLogger name="ASYNC" level="TRACE" additivity="false">
<appender-ref ref="databaseAppender"/>
</asyncLogger>
<!-- pattern layout actually uses location, so we need to include it -->
<asyncLogger name="ASYNCwithJNDI" level="TRACE" additivity="false">
<appender-ref ref="databaseAppenderJNDI"/>
</asyncLogger>
<root level="info" includeLocation="true">
<appender-ref ref="databaseAppender"/>
</root>
</loggers>
</configuration>
ログ関数を呼び出すJavaクラスでロガー名を切り替えることで、テキストファイルとDBにログを挿入できます。私の地元では問題ありません。
Webshere サーバーでは、
ロギング用の Web サービスを呼び出します。ログ関数を呼び出す同じ構成ファイルと同じ Java コードを使用しています。ログをファイルに挿入できますが、データベースにログを挿入できません。driverManager url と JNDI の両方を試しました。しかし、何も変わりませんでした。2 つの方法で、DB にログを挿入できず、プログラムは try-catch でエラーをスローしません。だから私は問題がどこにあるかを見つけることができません。
注: JNDI url と drivermanager url で問題はありません。wepshere のさまざまな Web サービスでこれらの URL を完全に使用できるためです。また、同じコードを使用して、ローカルのデータベースにログを挿入できます。
注 : ログを txt ファイルに挿入しても問題ありません。WebsphereサーバーではDB挿入のみが問題です。したがって、構成ファイルのクラスパスに問題はありません。
参考までに、私は oracle DB を使用していますが、問題は DB に関するものではありません。
サーバーでネットワーク パッケージをトレースすると、Web サービスがパッケージを DB に送信しないことがわかりました。パッケージは DB に到達しません。
どうすればこの問題を解決できますか?
THX。