Вимкнення виводу 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
Дякую, саме те, що я хотів.
Хосе Мартінес

А як повернути реєстраторам попередні налаштування (програмно)?
Sachin Sharma,

Ніякої магії, просто просте програмування. Збережіть поточний рівень у Map <Logger, Level> у довготривалому контексті, а потім поверніть його, перебираючи набір записів, що викликає e.getKey (). SetLevel (e.getValue ())
Ендрю Гілмартін,


14

Ви можете змінити рівень на ВИМК., Що повинно позбутися всіх реєстрацій. Відповідно до веб-сайту log4j, дійсними рівнями в порядку важливості є TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Існує один недокументований рівень, який називається OFF, який є вищим за FATAL, і вимикає всі журнали.

Ви також можете створити додатковий кореневий реєстратор, щоб нічого не реєструвати (рівень ВИМК), щоб ви могли легко перемикати кореневі реєстратори. Ось допис, щоб ви почали з цього.

Можливо, ви також захочете прочитати поширені запитання щодо Log4J, оскільки, на мою думку, вимкнення всіх журналів може не допомогти. Це, безумовно, не настільки пришвидшить вашу програму, тому що реєстраційний код все одно виконується, аж до того моменту, коли log4j вирішить, що йому не потрібно реєструвати цей запис.


А під TRACE знаходиться "рівень" ALL, що є протилежним. По-друге, це може бути швидше, якщо програма робить щось на зразок "if (logger.isDebugEnabled ()) logger.debug (...)"
Тім Бюте,

OP не згадує продуктивність як причину того, що бажає вимкнути всі журнали. Коли мені потрібно було це зробити, це тому, що багато бібліотек страждають на якусь дизентерію лісозаготівлі, яка не дає корисної інформації, і я хочу короткий спосіб вирішити її.
Mark Slater

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.