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

Java 我可以根据系统变量打开/关闭控制台日志记录吗?,java,log4j,Java,Log4j,我们维护一个应用程序范围的系统变量[debug=true | false],当系统变量debug为false时,我想在启动时禁用log4j中的所有控制台追加器 最好的方法就是对附加器进行程序扫描吗?或者有没有一种更优雅的方法,我可能不知道 如果这是正确的方法,那么任何关于扫描appender的初级读物都是受欢迎的。您是否考虑过为log4j设置.properties文件?您可以将log4j配置为向文件发送日志消息,关闭向控制台发送日志消息以获取信息、警告等。如果需要,您甚至可以按类进行配置。如果您

我们维护一个应用程序范围的系统变量[debug=true | false],当系统变量debug为false时,我想在启动时禁用log4j中的所有控制台追加器

最好的方法就是对附加器进行程序扫描吗?或者有没有一种更优雅的方法,我可能不知道


如果这是正确的方法,那么任何关于扫描appender的初级读物都是受欢迎的。

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


希望这能回答你的问题

我会为控制台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 ) ;
    }
}