1

我有一个小型应用程序,它通过网络服务将图片上传到另一个网站。我当前的问题是,Axis 正在通过 STDOUT 记录整个 xml 消息(包括图片的二进制数据!),我似乎不知道如何禁用它。

我的 jboss (jboss-log4j.xml) 的 log4j 设置包括一个用于普通 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 中的一个类别根本没有帮助。

有人知道如何关闭轴日志记录或至少将其设置为错误级别吗?

干杯
弗兰克

4

5 回答 5

3

这可能有点晚了,但问题似乎并不在于日志记录本身是在 Axis 中完成的(通过 System.out 和 Commons Logging),而是LogHandler存在于处理程序链中。这就是记录经过的时间的方式。

您可以从Axis 配置文件- server-config.wsdd 和/或 client-config.wsdd 禁用此处理程序,具体取决于您将 Axis 用作服务器还是客户端。

您在控制台中看到消息的原因可能是因为 LogHandler.writeToConsole 属性设置为 true。如果将 LogHandler.writeToConsole 设置为 false,它应该写入由 LogHandler.fileName 属性定义的文件。默认情况下,文件名为axis.log。

于 2009-09-10T10:43:40.503 回答
1

好的,在尝试找到更好的解决方案之后,唯一真正的方法是检查旧的遗留代码并将所有 System.out 调用转换为真正的日志记录语句(无论如何要好得多),然后简单地将剩余的 STDOUT 消息过滤到不同的日志中文件。

主要原因之一似乎是 Jboss 本身。这个来自axis2邮件列表的讨论解释了原因:啊,但是你没有提到你正在使用jboss!它几乎迫使你使用他们的父 log4 配置。在这种情况下忽略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

问题是 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 回答
0

首先,您需要检查您的 log4j 配置是否实际上是正在读取的配置 - 我记得在过去,至少有一个轴 jar(我认为可能是axis-ant.jar)因捆绑自己的 log4j.properties 而感到内疚。可能 log4j 正在读取与您不同的配置文件,使您调整配置的努力毫无意义!

您可以启用系统属性-Dlog4j.debug以使 log4j 打印到标准输出正在读取的配置文件。如有必要,您可以使用-Dlog4j.configuration=<file>来指向您自己的文件。

另外,我不认为这会导致您的问题,但是您为什么要将加法性设置为 false?

于 2009-08-07T12:55:59.920 回答