2013-07-12 11 views
6

Ich weiß, es gibt eine NullAppender in log4j. Aber ich kann den Appender nicht im Logbuch finden. Gibt es eine bessere Möglichkeit, alle Logs im Logback zu ignorieren?Hat Logback einen NullAppender?

+1

http://stackoverflow.com/questions/5924089/how-to-configure-logback-to-skip- logging-messages-from-org-package-with-all-le oder benutze 'EvaluatorFilter' – Ghostman

+1

Diese Frage ist eindeutig kein Duplikat. Das Ausfiltern ist völlig anders als die Möglichkeit, einen Null-Appender anzugeben. – pdeschen

Antwort

4

Wenn Sie die Protokollebene auf OFF einstellen, werden alle Protokolle ignoriert.

<logger name="..." level="OFF" /> 
+0

+1. Können Sie Ihrer Antwort einige Details hinzufügen, um ein Beispiel zu zeigen? Vielleicht etwas wie: \t '' – Gray

3

Einfach nur neugierig, was ist der Punkt ein NullAppender mit (was ich glaube einen Appender ist, die nichts zu tun), während Sie können einfach nicht jeden appender zu einem Logger Einstellung?

Und die ordnungsgemäße Möglichkeit, alle Protokolle zu deaktivieren, besteht darin, den Protokolliergrad auf OFF zu setzen.


Mit Kommentar von @djechlin, ich glaube es ist auch erwähnenswert Filter in LogBack. Wenn Sie einfach alle Nachrichten gehen durch eine appender deaktivieren möchten, können Sie einfach nutzen Threshold Filter machen:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- Deny everything below OFF, that means deny everything --> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>OFF</level> 
    </filter> 
    .... other config 
</appender> 
+0

Ich habe viele pkgs im Projekt und sie teilen die gleiche ROOT-Konfiguration. Und irgendwie möchte ich alle Logs für Klassen nur in pkg1 ignorieren. – DeepNightTwo

+0

Dann legen Sie einfach die Protokollstufe von pkg1 auf OFF. Das ist einer der Hauptzwecke der log4j-ähnlichen Logging-Bibliothek: Sie können das Verhalten des einzelnen Loggers (und dessen Kind) steuern. Wenn Sie einen Null-Appender haben, müssen Sie log4j weiterhin so konfigurieren, dass der Logger pkg1 den Null-Appender verwendet und seine Additivität auf "Falsch" gesetzt wird, wofür Sie einfach den Log-Level für pkg1 festlegen. –

+0

Viele Logger, die einen Appender benötigen, der je nach Konfiguration deaktiviert werden sollte (zB dev/prod). Um eine DRY-Änderung vorzunehmen, muss der Appender gelöscht werden. – djechlin

4

Sie immer einen schreiben:

public class NullAppender extends UnsynchronizedAppenderBase<ILoggingEvent> { 

    @Override 
    protected void append(ILoggingEvent eventObject) { 
     //no-op 
    } 
} 
6

Dies ist eine alte Frage, aber die gegebenen Antworten antworten nicht wirklich darauf.

Ja

Es gibt einen "null" appender, aber das ist nicht das, was sie aufgerufen wird. Ich glaube, dass der Logbuchautor den Begriff "no-op" bevorzugt, wenn er sich auf Implementierungen bezieht, die existieren, um einige Kompilierungs-, Test- oder andere Designanforderungen zu erfüllen, aber tatsächlich keine Operation ausführen. Die appender Implementierung, die ursprünglich gefragt wurde, etwa ist:

ch.qos.logback.core.helpers.NOPAppender 

javadoc

source