代码之家  ›  专栏  ›  技术社区  ›  Prabjot Singh

log4j:加载第三方JAR后,记录器停止工作

  •  -1
  • Prabjot Singh  · 技术社区  · 6 年前

    调用第三方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而不是属性文件。所以,我不想换第三方罐子。我假设它们覆盖了我的log4j配置,但我不知道确切的问题,因为即使是system.out.println也不起作用。

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Prabjot Singh    6 年前

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

    PropertyConfigurator.configure("log4j.properties");
    

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