在Java中禁用Log4J输出

在Java中禁用Log4J输出,java,logging,log4j,Java,Logging,Log4j,如何使用Log4J.properties文件快速关闭所有Log4J输出 (而不是调试,信息…)您可以将级别更改为OFF,这将消除所有日志记录。根据log4j网站,按重要性顺序排列的有效级别为跟踪、调试、信息、警告、错误和致命。有比致命级别更高的“关闭”命令,并关闭所有日志记录 您还可以创建一个额外的根记录器来不记录任何内容(调平),以便轻松切换根记录器。让你开始吧 您可能还想阅读,因为我认为关闭所有日志记录可能没有帮助。它肯定不会让你的应用程序加速那么多,因为不管怎样都会执行日志代码,直到log

如何使用
Log4J.properties
文件快速关闭所有Log4J输出
(而不是调试,信息…)

您可以将级别更改为OFF,这将消除所有日志记录。根据log4j网站,按重要性顺序排列的有效级别为跟踪、调试、信息、警告、错误和致命。有比致命级别更高的“关闭”命令,并关闭所有日志记录

您还可以创建一个额外的根记录器来不记录任何内容(调平),以便轻松切换根记录器。让你开始吧


您可能还想阅读,因为我认为关闭所有日志记录可能没有帮助。它肯定不会让你的应用程序加速那么多,因为不管怎样都会执行日志代码,直到log4j决定它不需要记录这个条目为止。

如果你想以编程方式关闭日志,那么使用

 log4j.rootLogger=OFF
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}
List loggers=Collections.List(LogManager.getCurrentLoggers());
add(LogManager.getRootLogger());
用于(记录器:记录器){
记录器设置电平(电平关闭);
}

根据需要更改级别。(我使用的是Log4j2,版本2.6.2)。这是最简单的方法,更改为

例如:文件
log4j2.xml

开发环境

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>

生产环境

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>

此外,还可以通过编程方式关闭日志记录:

Logger.getRootLogger().setLevel(Level.OFF);

这些使用进口:

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;

而在痕迹的下面是“水平”,所有的,都是相反的。其次,如果程序执行类似“if(logger.isDebugEnabled())logger.debug(…)”之类的操作,速度可能会更快。OP没有提到性能是希望关闭所有日志记录的原因。当我需要这样做的时候,是因为很多图书馆都患有一种日志痢疾,它不会产生有用的信息,我需要一种简单的方法来处理它。他指定“使用log4j.properties文件”无论如何这是非常有用的。谢谢,这正是我想要的。你如何将日志记录器恢复到以前的设置(以编程方式)?没有魔法,只是简单的编程。将当前级别存储在长期存在的上下文中的映射中,然后通过调用e.getKey().setLevel(e.getValue())迭代条目集进行还原。这是不应记录任何内容的独立应用程序的最佳解决方案。