代码之家  ›  专栏  ›  技术社区  ›  FrankS

禁用jboss中的axis log4j日志记录

  •  0
  • FrankS  · 技术社区  · 16 年前

    我有一个小应用程序,通过WebService将图片上传到另一个网站。 我现在的问题是,那个轴正在记录整个XML消息(包括图片的二进制数据!)通过stdout,我似乎不知道如何禁用它。

    我的jboss日志4j设置(jboss-log4j.xml)包括一个用于普通stdout信息日志的附加程序,我尝试禁用具有不同类别设置的axis:

    <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中将其设置为一个错误的类别并没有任何帮助。

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

    干杯
    弗兰克

    5 回复  |  直到 14 年前
        1
  •  2
  •   Vineet Reynolds    15 年前

    这可能有点晚,但问题似乎不是日志记录本身是在axis中完成的(通过system.out和commons日志记录),而是 LogHandler 存在于处理程序链中。这就是记录运行时间的方式。

    您可以从 Axis configuration file (S)-server-config.wsdd和/或client-config.wsdd,取决于您是将axis用作服务器还是客户机。

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

        2
  •  1
  •   FrankS    15 年前

    好的,在试图找到更好的解决方案后,唯一真正的方法是检查旧的遗留代码,并将所有System.Out调用转换为真实的日志语句(无论如何都要好得多),然后简单地将剩余的stdout消息筛选成不同的日志文件。

    其中一个主要原因似乎是JBoss本身。 This discussion 从axis2邮件列表中可以解释为什么: 啊,但是你没有提到你在使用JBoss!它几乎是力量 您可以使用它们的父级log4配置。忽略此中的axis2日志记录 案例,见:

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

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

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

    您可以保持原样,只需将日志从server.log中取出。

    我试着设置类别,但没有成功。我想这是因为轴和轴2之间的差异。所以剩下的唯一解决方案就是采用良好的编码方式,不要在自己的代码中使用stdout;-)

        3
  •  0
  •   matt b    16 年前

    首先,您要检查您的log4j配置实际上是正在读取的配置-我记得在过去,至少有一个axis jar(我认为它可能是 axis-ant.jar )被判捆绑他们自己的log4j.properties。可能是log4j正在读取与您不同的配置文件,这使得您在调整配置方面的努力毫无意义!

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

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

        4
  •  0
  •   Yishai    16 年前

    问题是,axis没有使用log4j来记录该消息,因此尝试更改该类上的log4j日志级别是不相关的。axis正在使用system.out.println。

    我能想到的唯一一件事(考虑到副作用,这确实不太好)是完全关闭stdout注销。可能将优先级设置为“关”就行了。

    唯一真正的解决方案是修复axis并修补代码,以避免将XML泵送到system.out,而是使用日志机制-然后您可以控制它。

        5
  •  0
  •   Vijay Kumar    14 年前

    知道正在读取哪个log4j.properties文件或log4j.xml非常重要。正如马特指出的,这对于知道你的调整努力为什么不起作用至关重要。

    推荐文章