我们维护一个应用程序范围的系统变量[debug = true | false],当系统变量debug为false时,我想在启动时禁用log4j中的所有CONSOLE appender。根据系统变量,我可以打开/关闭CONSOLE日志吗?
只是appenders的程序扫描的最佳方式?还是有更优雅的方法,我可能不知道?
如果这是正确的方法,任何扫描appender的入门书也将受到欢迎。
我们维护一个应用程序范围的系统变量[debug = true | false],当系统变量debug为false时,我想在启动时禁用log4j中的所有CONSOLE appender。根据系统变量,我可以打开/关闭CONSOLE日志吗?
只是appenders的程序扫描的最佳方式?还是有更优雅的方法,我可能不知道?
如果这是正确的方法,任何扫描appender的入门书也将受到欢迎。
我会为控制台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) ;
}
}
当然,这需要调整。就像调试的定义和访问方式一样。
中性是为了防止有人添加另一个过滤器...
再加上布局是我的,在这里使用您的首选布局。
警告。我没有测试它;-)
您是否研究过为log4j设置.properties文件?您可以配置log4j将日志消息发送到文件,关闭发送日志消息到控制台以获取信息,发出警告等。如果需要,您甚至可以根据每个类别进行配置。如果你去这个网站并导航到配置部分,它应该告诉你你需要知道什么。
http://logging.apache.org/log4j/1.2/manual.html
希望这回答了你的问题。