Unterschied zwischen logger.info und logger.debug

79

Was ist der Unterschied zwischen logger.debugund logger.info?

Wann wird logger.debuggedruckt?

Senthilnathan
quelle

Antworten:

28

Dies hängt von der Protokollierungskonfiguration ab. Der Standardwert hängt vom verwendeten Framework ab. Die Idee ist, dass später durch Ändern einer Konfigurationseinstellung von INFO in DEBUG eine Menge mehr (oder weniger, wenn umgekehrt) Zeilen gedruckt werden, ohne die gesamte Anwendung neu zu kompilieren.

Wenn Sie überlegen, welches Sie verwenden möchten, müssen Sie sich überlegen, was Sie auf welcher Ebene sehen möchten. Weitere Ebenen, beispielsweise in Log4J, finden Sie in der API unter http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html

toomasr
quelle
121

Ich schlage vor, Sie lesen den Artikel "Kurze Einführung in log4j" . Es enthält eine kurze Erläuterung der Protokollebenen und zeigt, wie sie in der Praxis verwendet werden können. Die Grundidee der Protokollebenen besteht darin, dass Sie in der Lage sein möchten, zu konfigurieren, wie viele Details die Protokolle je nach Situation enthalten. Wenn Sie beispielsweise versuchen, ein Problem zu beheben, möchten Sie, dass die Protokolle sehr ausführlich sind. In der Produktion möchten Sie möglicherweise nur Warnungen und Fehler sehen.

Die Protokollstufe für jede Komponente Ihres Systems wird normalerweise über einen Parameter in einer Konfigurationsdatei gesteuert, sodass sie leicht geändert werden kann. Ihr Code würde verschiedene Protokollierungsanweisungen mit unterschiedlichen Ebenen enthalten. Wenn Sie auf eine antworten Exception, können Sie anrufen Logger.error. Wenn Sie den Wert einer Variablen an einem bestimmten Punkt drucken möchten, können Sie aufrufen Logger.debug. Diese Kombination aus einer konfigurierbaren Protokollierungsstufe und Protokollierungsanweisungen in Ihrem Programm ermöglicht Ihnen die vollständige Kontrolle darüber, wie Ihre Anwendung ihre Aktivitäten protokolliert.

Zumindest im Fall von log4j lautet die Reihenfolge der Protokollebenen:

DEBUG < INFO < WARN < ERROR < FATAL

Hier ist ein kurzes Beispiel aus diesem Artikel, das zeigt, wie Protokollebenen funktionieren.

   // get a logger instance named "com.foo"
   Logger logger = Logger.getLogger("com.foo");

   // Now set its level. Normally you do not need to set the
   // level of a logger programmatically. This is usually done
   // in configuration files.
   logger.setLevel(Level.INFO);

   Logger barlogger = Logger.getLogger("com.foo.Bar");

   // This request is enabled, because WARN >= INFO.
   logger.warn("Low fuel level.");

   // This request is disabled, because DEBUG < INFO.
   logger.debug("Starting search for nearest gas station.");

   // The logger instance barlogger, named "com.foo.Bar",
   // will inherit its level from the logger named
   // "com.foo" Thus, the following request is enabled
   // because INFO >= INFO.
   barlogger.info("Located nearest gas station.");

   // This request is disabled, because DEBUG < INFO.
   barlogger.debug("Exiting gas station search");
William Brendel
quelle
@momomo Vielleicht möchten Sie diese Antwort überprüfen, um zu erfahren, wie Tracehoch die Protokollstufe ist.
RBT
Ihr Beispiel If you want to print the value of a variable at any given point, you might call Logger.debughat mir geholfen, die Verwirrung zu klären, die ich zwischen Debugund TraceEbene hatte. Vielen Dank!
RBT
13

Nur eine Klarstellung über die Menge aller möglichen Ebenen, die sind:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
user1823890
quelle
9

Grundsätzlich hängt es davon ab, wie Ihre Logger konfiguriert sind. Normalerweise haben Sie die Debug-Ausgabe während der Entwicklung ausgeschrieben, aber in der Produktion deaktiviert - oder möglicherweise Debug-Kategorien ausgewählt , die beim Debuggen eines bestimmten Bereichs ausgeschrieben wurden.

Wenn Sie unterschiedliche Prioritäten haben, können Sie den Detaillierungsgrad einer bestimmten Komponente auf einigermaßen feinkörnige Weise erhöhen / verringern - und nur die Protokollierungskonfiguration (anstelle von Code) ändern, um den Unterschied zu erkennen.

Jon Skeet
quelle
0

Was ist der Unterschied zwischen logger.debug und logger.info?

Dies sind nur einige bereits definierte Standardstufen. Sie können Ihre eigenen Ebenen definieren, wenn Sie möchten. Der Zweck dieser Ebenen besteht darin, eine oder mehrere von ihnen zu aktivieren / deaktivieren, ohne Änderungen an Ihrem Code vorzunehmen.

Wann wird logger.debug gedruckt?

Wenn Sie das Debugging oder eine höhere Ebene in Ihrer Konfiguration aktiviert haben.

Handwerker
quelle
0

Dies hängt davon ab, welche Ebene Sie in Ihrer log4j-Konfigurationsdatei ausgewählt haben.

<Loggers>
        <Root level="info">
        ...

Wenn Ihr Level "Info" ist (standardmäßig), logger.debug(...)wird es nicht in Ihrer Konsole gedruckt. Wenn Ihr Level jedoch "Debug" ist, wird es.

Abhängig von der Kritikalitätsstufe Ihres Codes sollten Sie die genaueste unter den folgenden verwenden:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
Jack'
quelle
0

Dies ist eine sehr alte Frage, aber ich sehe mein Verständnis hier nicht, also werde ich meine 2 Cent hinzufügen:

Jede Ebene entspricht / ordnet einem Benutzertyp zu:

  • Debug: Entwickler - manuelles Debuggen
  • trace: automatisierte Protokollierung und Step Tracer - für Unterstützung der 3. Ebene
  • Info: Techniker / Support Level 1/2
  • Warnung: Techniker- / Benutzerfehler: Automatische Alarm- / Supportstufe 1
  • kritisch / tödlich: hängt von Ihrem Setup ab - lokale IT
Mickey Perlstein
quelle
0
  1. INFO wird verwendet, um die Informationen zu protokollieren, mit denen Ihr Programm wie erwartet arbeitet.
  2. DEBUG wird verwendet, um den Grund zu ermitteln, falls Ihr Programm nicht wie erwartet funktioniert oder eine Ausnahme aufgetreten ist. Es ist im Interesse des Entwicklers.
Santosh Srivastava
quelle