2011-01-28 85 views
3

我们维护一个应用程序范围的系统变量[debug = true | false],当系统变量debug为false时,我想在启动时禁用log4j中的所有CONSOLE appender。根据系统变量,我可以打开/关闭CONSOLE日志吗?

只是appenders的程序扫描的最佳方式?还是有更优雅的方法,我可能不知道?

如果这是正确的方法,任何扫描appender的入门书也将受到欢迎。

回答

2

我会为控制台appender写一个特殊的过滤器。沿

<appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.TTCCLayout"> 
     <param name="ConversionPattern" value="%d...m%n"/> 
    </layout> 
    <filter class="OnDebugOnly"/> 
</appender> 

行定义为筛选如下

import org.apache.log4j.spi.Filter; 
import org.apache.log4j.spi.LoggingEvent; 

public class OnDebugOnly extends Filter { 

    static boolean debug; 

    @Override 
    public int decide(LoggingEvent event) { 
     return (debug ? Filter.NEUTRAL : Filter.DENY) ; 
    } 
} 

当然,这需要调整。就像调试的定义和访问方式一样。
中性是为了防止有人添加另一个过滤器...
再加上布局是我的,在这里使用您的首选布局。
警告。我没有测试它;-)

0

您是否研究过为log4j设置.properties文件?您可以配置log4j将日志消息发送到文件,关闭发送日志消息到控制台以获取信息,发出警告等。如果需要,您甚至可以根据每个类别进行配置。如果你去这个网站并导航到配置部分,它应该告诉你你需要知道什么。

http://logging.apache.org/log4j/1.2/manual.html

希望这回答了你的问题。

相关问题