我可以根据系统变量打开/关闭CONSOLE日志记录吗?

时间:2011-01-28 04:40:42

标签: java log4j

我们维护一个应用程序范围的系统变量[debug = true | false],我想在系统变量debug为false时在启动时禁用log4j中的所有CONSOLE appender。

最好的方式只是对appender进行编程扫描吗?或者是否有一种我不知道的更优雅的方法?

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

2 个答案:

答案 0 :(得分: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 ) ;
    }
}

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

答案 1 :(得分:0)

您是否考虑过为log4j设置.properties文件?您可以配置log4j以将日志消息发送到文件,关闭向控制台发送日志消息以获取信息,警告等。如果需要,您甚至可以按类别进行配置。如果您访问此站点并导航到“配置”部分,它应该告诉您需要了解的内容。

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

希望这能回答你的问题。