1

Webサービスを介して別のWebサイトに写真をアップロードしている小さなアプリケーションがあります。私の現在の問題は、AxisがSTDOUTを介してxmlメッセージ全体(画像のバイナリデータを含む!)をログに記録していて、それを無効にする方法がわからないことです。

jbossのlog4j設定(jboss-log4j.xml)には、通常のSTDOUT情報ログのアペンダーが含まれており、異なるカテゴリー設定で軸を無効にしようとしました。

<appender name="STDLOG" class="org.jboss.logging.appender.RollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/myapplication.log"/>
  <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5MB"/>
    <param name="MaxBackupIndex" value="10"/>

    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
  </layout>
</appender>

STDOUTにこの設定を使用する:

<category name="STDOUT">
  <priority value="DEBUG"/>
  <appender-ref ref="STDLOG"/>
</category>

結果を変更せずに、これらのカテゴリ設定を試しました。

<category name="log4j.logger.org.apache.axis" additivity="false">
  <priority value="ERROR"/>
</category>

<category name="org.apache.axis">
  <priority value="ERROR"/>
</category>

一部のサンプルログ出力は次のようになります。

2009-08-07 10:29:43,911 INFO  [STDOUT] (http-127.0.0.1-8080-1) =======================================================
= Elapsed: 2190 milliseconds
= In message: <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <addVehicleImage xmlns="urn:VMgrWebService">
   <id xmlns="">APP-T4QKR3U</id>
   <idType xmlns="">chiffre</idType>
   <data xmlns="">9j4AAQSkZJRgABAQAAAQABAAD2wBDAAUDBAQEAwUEBAQFB
     QUGBww0TDMnrXAfKlLjnNJZcciiAOtqk9NG99qhZJKuyYq5k3G
     8P2bVSOpT7rVddRP2Z/yqidRuMMKaO2CXRQNWP2jfOo4S4Bo3W
   removed rest of image data...
     IBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGe1UqaZJJy0jSHPGQ
2009-08-07 10:29:43,927 INFO  [STDOUT] (http-127.0.0.1-8080-1) Upload result: true for image mypicture.JPG  

更新axis-1.4.jarを確認したところ、 simplelog.properties というファイルがあります。

# Logging detail level,
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
org.apache.commons.logging.simplelog.defaultlog=info

これをjar内で、またはjboss-log4j.xmlのカテゴリーとしてエラーに設定しても、まったく役に立ちませんでした。

Axisロギングをオフにする方法、または少なくともERRORレベルに設定する方法を知っている人はいますか?

乾杯
フランク

4

5 に答える 5

3

これは1日の少し遅いかもしれませんが、問題は、ロギング自体がAxisで(System.outおよびCommons Loggingを介して)行われることではなく、LogHandlerがハンドラーチェーンに存在することであるようです。これが経過時間がログに記録される方法です。

Axisをサーバーとして使用しているかクライアントとして使用しているかに応じて、 Axis構成ファイル(server-config.wsddおよび/またはclient-config.wsdd)からこのハンドラーを無効にすることができます。

コンソールにメッセージが表示される理由は、LogHandler.writeToConsoleプロパティがtrueに設定されていることが原因である可能性があります。LogHandler.writeToConsoleをfalseに設定すると、LogHandler.fileNameプロパティで定義されているようにファイルに書き込む必要があります。デフォルトでは、ファイル名はaxis.logです。

于 2009-09-10T10:43:40.503 に答える
1

わかりました。より良い解決策を見つけようとした後、唯一の実際の方法は、古いレガシーコードをチェックし、すべてのSystem.out呼び出しを実際のログステートメントに変換し(とにかくはるかに優れています)、残りのSTDOUTメッセージを別のログにフィルタリングすることでした。ファイル。

主な理由の1つは、Jboss自体にあるようです。axis2メーリングリストからのこのディスカッションは、その理由を説明しています。ああ、でも、jbossを使用しているとは言わなかった!親のlog4configを使用する必要があります。この場合、axis2のロギングを無視して、以下を参照してください。

〜/ jboss / server / default / conf / log4j.xml

そこで、カテゴリを制限する必要があります。たとえば、次のようになります。

<category name="org.apache">
  <priority value="INFO"/>
</category>

それをそのままにして、server.logからログを取り出すことができます。

カテゴリを設定してみましたが、うまくいきませんでした。これはaxisとaxis2の違いによるものだと思います。したがって、残っている唯一の解決策は、適切なコーディング方法を採用し、独自のコードでSTDOUTを使用しないことでした;-)

于 2009-08-19T11:21:07.727 に答える
0

まず、log4j構成が実際に読み取られているものであることを確認する必要があります-過去に、少なくとも1つの軸jar(おそらくそうだったと思いますaxis-ant.jar)が独自のlog4j.propertiesをバンドルした罪を犯したことを思い出します。log4jが自分とは異なる構成ファイルを読み取っていて、構成を微調整する努力が無意味になっている可能性があります。

システムプロパティ-Dlog4j.debugを有効にして、log4jを標準に出力し、どの構成ファイルを読み取るかを指定できます。必要に応じて、を使用-Dlog4j.configuration=<file>して独自のファイルを指すことができます。

また、これが問題の原因ではないと思いますが、なぜ加法性をfalseに設定しているのですか?

于 2009-08-07T12:55:59.920 に答える
0

問題は、AxisがLog4jを使用してそのメッセージをログに記録していないため、そのクラスでlog4jログレベルを変更しようとしても関係がないことです。AxisはSystem.out.printlnを使用しています。

私が考えることができる唯一のこと(副作用を考えると本当に良くありません)は、STDOUTログを完全にオフにすることです。おそらく、優先度をオフに設定することで十分です。

唯一の実際の解決策は、Axisを修正し、コードにパッチを適用してxmlをSystem.outに送り込まず、代わりにロギングメカニズムを使用することです。そうすれば、それを制御できます。

于 2009-08-07T14:10:10.007 に答える
0

どのlog4j.propertiesファイルまたはlog4j.xmlが読み取られているかを知ることは非常に重要です。マットが指摘したように、これは、調整作業が機能しない理由を知る上で非常に重要です。

于 2010-10-18T19:43:51.567 に答える