0

私の地元では、

そのように構成するために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。

4

1 に答える 1

0

log4j チームが確認できるように、log4j2 イシュー トラッカーでこれを報告してください。

于 2013-11-06T22:17:26.797 に答える