Deaktivieren der Log4J-Ausgabe in Java


87

Wie kann man alle Log4J- Ausgaben mithilfe einer log4j.propertiesDatei schnell ausschalten ?

Antworten:


120

Stellen Sie den Pegel auf OFF (anstelle von DEBUG, INFO, ....)


79

Wenn Sie die Protokollierung programmgesteuert deaktivieren möchten, verwenden Sie

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

5
Er hat "using a log4j.properties file" angegeben, trotzdem ist es sehr nützlich.
Jaime Hablutzel

1
Danke, genau das, was ich wollte.
Jose Martinez

Und wie können Sie die Logger auf die vorherige Einstellung zurücksetzen (programmgesteuert)?
Sachin Sharma

Keine Magie, nur einfache Programmierung. Speichern Sie die aktuelle Ebene in einer Map <Logger, Ebene> in einem langlebigen Kontext und kehren Sie dann zurück, indem Sie über den Eintragssatz iterieren, der e.getKey () aufruft. SetLevel (e.getValue ())
Andrew Gilmartin


14

Sie können den Pegel auf AUS ändern, um alle Protokollierungen zu entfernen. Laut der log4j-Website sind gültige Werte in der Reihenfolge ihrer Wichtigkeit TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Es gibt eine undokumentierte Ebene namens OFF, die höher als FATAL ist und die gesamte Protokollierung deaktiviert.

Sie können auch einen zusätzlichen Root-Logger erstellen, um nichts zu protokollieren (Stufe AUS), sodass Sie Root-Logger einfach wechseln können. Hier ist ein Beitrag , mit dem Sie beginnen können.

Vielleicht möchten Sie auch die Log4J-FAQ lesen , da ich denke , dass das Deaktivieren der gesamten Protokollierung möglicherweise nicht hilft. Es wird Ihre App sicherlich nicht so sehr beschleunigen, da der Protokollierungscode ohnehin ausgeführt wird, bis zu dem Punkt, an dem log4j entscheidet, dass dieser Eintrag nicht protokolliert werden muss.


Und unter TRACE befindet sich das "Level" ALL, was genau das Gegenteil ist. Zweitens könnte es schneller sein, wenn das Programm so etwas wie "if (logger.isDebugEnabled ()) logger.debug (...)" ausführt
Tim Büthe

Das OP nennt die Leistung nicht als Grund dafür, dass die gesamte Protokollierung deaktiviert werden soll. Wenn ich dies tun musste, liegt es daran, dass viele Bibliotheken unter einer Art Protokollierungsruhr leiden, die keine nützlichen Informationen hervorbringt, und ich möchte eine kurze Möglichkeit, damit umzugehen.
Mark Slater

4

Ändern Sie das Level auf das, was Sie wollen. (Ich verwende Log4j2, Version 2.6.2). Dies ist der einfachste Weg, wechseln Sie zu<Root level="off">

Zum Beispiel: Datei - log4j2.xml
Entwicklungsumgebung

<?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>

Produktionsumgebung

<?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

Darüber hinaus ist es auch möglich, die Abmeldung programmgesteuert zu deaktivieren:

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

Oder

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

Diese verwenden Importe:

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

1
Dies ist die beste Lösung für eigenständige Apps, die nichts protokollieren sollten.
BasZero
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.