我们维护一个应用程序范围的系统变量[debug = true | false],我想在系统变量debug为false时在启动时禁用log4j中的所有CONSOLE appender。
最好的方式只是对appender进行编程扫描吗?或者是否有一种我不知道的更优雅的方法?
如果这是正确的方法,任何有关扫描appender的入门书也会受到欢迎。
答案 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
希望这能回答你的问题。