繁体   English   中英

在jboss中禁用Axis log4j日志记录

[英]Disable Axis log4j logging in jboss

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

我的jboss的log4j设置(jboss-log4j.xml)包括一个用于常规STDOUT Info日志记录的附加程序,我尝试禁用具有不同类别设置的轴:

<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级别吗?

干杯
坦率

这可能会花费一些时间,但问题似乎不在于日志本身是在Axis中完成的(通过System.out和Commons Logging),而是在处理程序链中存在LogHandler 这样便可以记录经过的时间。

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

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

好的,尝试找到更好的解决方案后,唯一的真实方法是检查旧的旧代码并将所有System.out调用转换为真实的日志记录语句(无论如何还是更好),然后将其余的STDOUT消息过滤到另一个日志中文件。

主要原因之一似乎是Jboss本身。 来自axis2邮件列表的讨论解释了原因:啊,但是您没有提到您正在使用jboss! 这几乎迫使您使用其父级log4 config。 在这种情况下,请忽略axis2日志记录,请参阅:

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

在那里,您必须限制类别。 例如,您有:

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

您可以保持原样,而只是将日志从server.log中删除。

我尝试设置类别,但没有成功。 我认为这是由于axis和axis2之间的差异。 因此,剩下的唯一解决方案是采用良好的编码方式,只是不要在自己的代码中使用STDOUT ;-)

首先,您需要检查您的log4j配置实际上是正在读取的配置-我记得在过去,至少有一个axis jar(我想可能是axis-ant.jar )有罪将它们捆绑在一起拥有log4j.properties。 可能是log4j正在读取与您的配置文件不同的配置文件,从而使您对配置进行的调整毫无意义!

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

另外,我不认为这会引起您的问题,但是为什么将可加性设置为false?

问题在于Axis没有使用Log4j记录该消息,因此尝试更改该类上的log4j记录级别无关。 Axis正在使用System.out.println。

我唯一能想到的(考虑到副作用,这确实不好)是完全关闭STDOUT登录。 可能将优先级设置为off即可。

唯一真正的解决方案是修复Axis并修补代码,以不将xml泵送到System.out,而是使用日志记录机制-然后您可以控制它。

知道正在读取哪个log4j.properties文件或log4j.xml非常重要。 正如Matt所指出的那样,这对于了解为什么您的调整工作不起作用至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM