Отключение вывода Log4J в Java


87

Как можно быстро отключить весь вывод Log4J с помощью log4j.propertiesфайла?

Ответы:



79

Если вы хотите программно отключить ведение журнала, используйте

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

5
Он указал «использование файла log4j.properties» в любом случае, это очень полезно.
Jaime Hablutzel

1
Спасибо, именно то, что я хотел.
Jose Martinez

А как вернуть логгеры к предыдущей настройке (программно)?
Сачин Шарма

Никакого волшебства, просто программирование. Сохраните текущий уровень в Map <Logger, Level> в долгоживущем контексте, а затем вернитесь, перебирая набор записей, вызывая e.getKey (). SetLevel (e.getValue ())
Эндрю Гилмартин


14

Вы можете изменить уровень на OFF, что должно избавить от всех журналов. Согласно веб-сайту log4j, допустимые уровни в порядке важности следующие: TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Есть один недокументированный уровень под названием OFF, который выше, чем FATAL, и отключает все журналы.

Вы также можете создать дополнительный корневой регистратор, чтобы ничего не регистрировать (уровень ВЫКЛЮЧЕН), чтобы вы могли легко переключать корневые регистраторы. Вот пост, чтобы вы начали с этого.

Вы также можете прочитать FAQ по Log4J, потому что я думаю, что отключение всех журналов может не помочь. Это, конечно, не сильно ускорит ваше приложение, потому что код ведения журнала выполняется в любом случае до момента, когда log4j решает, что ему не нужно регистрировать эту запись.


А под TRACE находится ВСЕ "уровень", как бы наоборот. Во-вторых, это могло бы быть быстрее, если бы программа выполняла что-то вроде «if (logger.isDebugEnabled ()) logger.debug (...)»
Тим Бют

OP не упоминает производительность как причину, по которой вы хотите отключить все журналы. Когда мне нужно было это сделать, это потому, что многие библиотеки страдают от дизентерии журналирования, которая не дает полезной информации, и мне нужен краткий способ справиться с этим.
Марк Слейтер

4

Измените уровень на то, что хотите. (Я использую Log4j2 версии 2.6.2). Это самый простой способ изменить на<Root level="off">

Например: Среда разработки файлов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>

4

Кроме того, также можно программно отключить выход из системы:

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

Или

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());

Они используют импорт:

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

1
Это лучшее решение для автономных приложений, которые не должны ничего регистрировать.
basZero
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.