it-swarm.com.de

Gute Beispiele für die Verwendung von Java.util.logging

Ich möchte Protokolle in meinem Programm verwenden. Ich habe von Java.util.logging gehört, weiß aber nicht, wie ich anfangen soll.

Gibt es Beispiele dafür, was ich mit der Protokollierung tun kann? Wie würde ich die Anmeldung in meinem eigenen Programm verwenden?

256
Renato Dinhani

Java.util.logging verhindert, dass Sie eine weitere JAR-Datei mit Ihrer Anwendung verschieben müssen, und das funktioniert gut mit einem guten Formatierer.

Im Allgemeinen sollten Sie am Anfang jeder Klasse haben:

_private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
_

Dann können Sie einfach verschiedene Funktionen der Klasse Logger verwenden.


Verwenden Sie Level.FINE für alles, was das Debuggen am Anfang ist Ebene des Ausführungsflusses:

_LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
_

Verwenden Sie _Level.FINER_/_Level.FINEST_ in Schleifen und an Stellen, an denen Sie beim Debuggen grundlegender Ablaufprobleme möglicherweise nicht immer so viele Details sehen müssen:

_LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
_

Verwenden Sie die parametrisierten Versionen der Protokollierungsfunktionen, um zu verhindern, dass Tonnen von String-Verkettungs-Müll erzeugt werden, mit denen GC Schritt halten muss. _Object[]_ wie oben ist günstig, bei der Stapelzuordnung meistens.


Protokollieren Sie bei der Ausnahmebehandlung immer die vollständigen Ausnahmedetails:

_try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
_

Ich übergebe hier immer ex.toString() als Nachricht, denn wenn ich dann "_grep -n_" für "Exception" in den Protokolldateien schreibe, kann ich die Nachricht auch sehen. Andernfalls wird es in der nächsten Ausgabezeile angezeigt, die vom Stapelspeicherauszug generiert wird, und Sie müssen über eine erweiterte RegEx-Funktion verfügen, die auch dieser Zeile entspricht. Dadurch erhalten Sie häufig mehr Ausgabe, als Sie durchsehen müssen.

318
grwww

Sollte logger wie folgt deklarieren:

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

wenn Sie also Ihren Klassennamen umgestalten, folgt er.

Ich habe einen Artikel über Java logger mit Beispiele hier geschrieben.

66
hanoo

Es gibt viele Beispiele und auch verschiedene Arten der Protokollierung. Schauen Sie sich das Paket Java.util.logging an.

Beispielcode:

import Java.util.logging.Logger;

public class Main {

  private static Logger LOGGER = Logger.getLogger("InfoLogging");

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

Ohne Hardcodierung wird Klassenname :

import Java.util.logging.Logger;

public class Main {
  private static final Logger LOGGER = Logger.getLogger(
    Thread.currentThread().getStackTrace()[0].getClassName() );

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}
50
Ankit

SLF4J ist eine bessere Protokollierungsfassade als Apache Commons Logging (ACL). Es verfügt über Brücken zu anderen Protokollierungsframeworks, die direkte Aufrufe an ACL, Log4J oder Java Util Logging über SLF4J ausführen, sodass Sie die gesamte Ausgabe mit nur einer Protokollkonfiguration auf Wunsch in eine Protokolldatei umleiten können Datei. Warum sollte Ihre Anwendung mehrere Protokollierungsframeworks verwenden? Da Sie wahrscheinlich Bibliotheken von Drittanbietern verwenden, insbesondere ältere.

SLF4J unterstützt verschiedene Protokollierungsimplementierungen. Es kann alles auf Standard-Out, Log4J oder Logback ausgeben (empfohlen über Log4J).

http://www.slf4j.org/

http://logback.qos.ch/

21
bcody

Ich würde minlog verwenden, persönlich. Es ist extrem einfach, da die Protokollierungsklasse aus einigen hundert Codezeilen besteht.

9
Chris Dennett

Ich würde vorschlagen, dass Sie Apache Commons Logging Utility verwenden. Es ist hoch skalierbar und unterstützt separate Protokolldateien für verschiedene Logger. siehe hier .

0
nIKUNJ