Log4j:加载第三方jar后,记录器停止工作

时间:2018-08-21 12:34:14

标签: java spring logging log4j slf4j

记录器在调用第三方jar方法后突然停止工作。我检查了jar的代码,他们也将log4j与log4j.xml一起使用。我正在使用属性文件配置log4j。

我的log4j配置

log4j.rootLogger=DEBUG, stdout, R
#log4j.rootLogger=ERROR, stdout, R
log4j.appender.R.File=/logs/app_test.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.MaxBackupIndex=175
log4j.appender.R.layout.ConversionPattern=%d %p %t %c - %m%n
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.R=org.apache.log4j.RollingFileAppender

第三方日志配置(log4j.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!--Pattern used: Date Thread_Name Full_Class_Name.Method_Name Level:Line 
    no -->
<!-- %-23d{ISO8601} [THREAD:%t] [%-2c.%M():%L] [%p] - %m%n -->


<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">


    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%-23d{ISO8601} [%-5p] [%-22t] [%-30C{1}:%4L] - %m%n" />
        </layout>
    </appender>

    <appender name="errorAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File"
            value="${catalina.base}/logs/metascan/metsascanWrapperError.log" />
            <param name="maxFileSize" value="10MB" />
                    <param name="Threshold" value="ERROR" />
        <param name="maxBackupIndex" value="2" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy MM dd HH:mm:ss:SSS} [%-40t] %5p - %m %n" />
        </layout>
    </appender>

    <appender name="infoAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File"
            value="${catalina.base}/logs/metascan/metsascanWrapperInfo.log" />
        <param name="maxFileSize" value="10MB" />
        <param name="maxBackupIndex" value="2" />
        <param name="Threshold" value="INFO" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%-23d{ISO8601} [%-5p] [%-22t] [%-30C{1}:%4L] - %m%n" />
        </layout>
    </appender>


    <appender name="debugAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File"
            value="${catalina.base}/logs/metascan/metsascanWrapperDebug.log" />
        <param name="maxFileSize" value="10MB" />
        <param name="maxBackupIndex" value="2" />
        <param name="Threshold" value="DEBUG" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%-23d{ISO8601} [%-5p] [%-22t] [%-30C{1}:%4L] - %m%n" />
        </layout>
    </appender>


    <category name="com.xerox.metascan" additivity="true">
        <priority value="ERROR" />
        <appender-ref ref="infoAppender" />
        <appender-ref ref="debugAppender" />
        <appender-ref ref="consoleAppender" />
    </category>

    <!-- <category name="org.springframework"> <priority value="error" /> <appender-ref 
        ref="infoAppender90" /> <appender-ref ref="errorAppender90" /> </category> -->
    <root>
        <priority value="error" />
        <appender-ref ref="errorAppender" />
        <appender-ref ref="consoleAppender" />

    </root>

</log4j:configuration>

我已经阅读了log4j网站上的配置,偏好设置始终会转到属性文件上的log4j.xml。因此,我不想在第三方jar中进行更改。我以为他们正在覆盖我的log4j配置,但我不知道确切的问题,因为即使system.out.println也不起作用。

那么我们如何解决该问题,有什么办法可以忽略第三方日志配置?

任何建议都会有所帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

否,您不能忽略第三方日志,可以通过在外部加载log4j配置来覆盖它们。

PropertyConfigurator.configure("log4j.properties");

但理想情况下,这不是一个好习惯。您应该告诉他们谁为您提供了jar,他们应该解决此问题,因为任何第三方jar都不会影响您的配置。