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

Log4j: Logger stops working after load third party jar

记录器在调用第三方jar方法后突然停止工作。我已经检查了 jar 的代码,他们也在 log4j.xml 中使用 log4j。我正在使用属性文件配置 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 而不是属性文件。所以,我不想改变第三方罐子。我假设他们正在覆盖我的 log4j 配置,但我不知道确切的问题,因为即使 system.out.println 也不起作用。

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

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

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

PropertyConfigurator.configure("log4j.properties");

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