java.util.logging
verhindert, dass Sie eine weitere JAR-Datei mit Ihrer Anwendung herumtragen müssen, und dies funktioniert gut mit einem guten Formatierer.
Im Allgemeinen sollten Sie an der Spitze jeder Klasse Folgendes haben:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
Dann können Sie einfach verschiedene Funktionen der Logger- Klasse verwenden.
Verwenden Sie Level.FINE
für alles , was ist das Debuggen auf der obersten Ebene der Ausführungsablauf:
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
Verwenden Sie Level.FINER
/ Level.FINEST
innerhalb von 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-Verkettungsmüll generiert werden, mit dem GC Schritt halten muss. Object[]
wie oben ist billig, auf der Stapelzuordnung in der Regel.
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()
die Nachricht, denn wenn ich dann in Protokolldateien " grep -n
" für " Exception
" bin, 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 ein erweitertes RegEx verfügen, um auch dieser Zeile zu entsprechen. Dadurch erhalten Sie häufig mehr Ausgabe, als Sie durchsehen müssen.