【问题标题】:log4j appender priority conflict?log4j appender 优先级冲突?
【发布时间】:2014-07-23 18:37:58
【问题描述】:

我有这个 log4j.properties:

# Global logging configuration
log4j.rootLogger=WARN, file

### Direct log messages to a log file
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File= C:\\eclipse\\servers\\apache-tomcat-6.0.39\\logs\\log4j.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n


### Console messages Appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n

### Appender-to-Class definition
log4j.logger.com.XXX.payplatform.test.*=INFO, console
log4j.additivity.com.XXX.payplatform.test.*=false

所以,好的,WARN 级别信息正在 log4j.log 文件中注册。没关系。

但是,我想在我的 Eclipse 控制台中查看 INFO 级别的消息,但那里没有得到任何响应。

有什么解决办法吗?我认为问题出在"WARN, file" rootLogger 配置中,所以我尝试了这个:

# Global logging configuration
log4j.rootLogger=INFO, file

但没有产生任何变化...

谢谢!

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    阅读更多Apache log4j 1.2 - Short introduction to log4j 并找到示例。

    关卡继承

    给定记录器 C 的继承级别等于记录器层次结构中的第一个非空级别,从 C 开始,在层次结构中向上向根记录器前进。

    基本选择规则

    如果 p >= q,则在具有(分配或继承,以适当者为准)级别 q 的记录器中启用级别 p 的日志请求。

    这条规则是 log4j 的核心。它假定级别是有序的。对于标准级别,我们有 DEBUG


    应该是这样的。在此处添加console,并将默认根日志级别设置为INFO

    log4j.rootLogger=INFO, file, console
    

    尝试使用log4j.xml 而不是log4j.properties。阅读更多Configuring Log4j 2

    样本log4j.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d{ISO8601} %5p %c{1}:%L - %m%n" />
            </layout>
        </appender>
    
        <appender name="FILE_LOG" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="File" value="/logs/log4j.log" />
            <param name="Append" value="true" />
            <param name="ImmediateFlush" value="true"/>
            <param name="DatePattern" value="'.'dd-MM-yyyy-HH"/>
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d{ISO8601} %5p %c{1}:%L - %m%n" />
            </layout>
        </appender> 
            
        <category name="com.XXX.payplatform.test">
            <priority value="INFO" />
            <appender-ref ref="STDOUT"/>
        </category> 
        
        <root> 
            <priority value ="ERROR" />
            <appender-ref ref="FILE_LOG" />
        </root>
    </log4j:configuration>
    

    【讨论】:

    • 谢谢!!!但是......如果我只想在 rootLogger 中收集 WARN(或更大)消息,但我想在控制台中查看每条 DEBUG(或更大)消息,会发生什么?编辑:我得到相同的输出文件和控制台,以及 com.XXX.foo.bar 类输出。
    • 您可以尝试使用log4j.xml,您可以完全控制它。在这里找到它Log4j - priority value and param name concept explanation
    • 谢谢Braj,但由于公司的限制,我不能这样做:(必须是log4j.properties文件
    • 您好,Braj,我通过查看您给我的链接找到了解决方案。我张贴它并给你信用!非常感谢!!!
    猜你喜欢
    • 2011-02-06
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多