2012-03-26 9 views
3

Ich bin neu in Java, ich weiß, Java hat Log4J, Logback usw. für die Protokollierung. Meine Frage ist mehr, wie viele Protokolldateien wir in einer Anwendung haben sollten. Sollte es pro Thread, pro Gruppe von Threads, Prozess, Ausnahme usw. sein. In unserer Anwendung gibt es eine Möglichkeit, eine große Anzahl von Threads zu haben und denke darüber nach, eine Log-Datei pro Thread zu haben. Gibt es Best Practices für das Anmelden von Anwendungen mit einer großen Anzahl von Threads?Wie Log-Struktur für eine Java-Anwendung zu entwerfen

Vielen Dank im Voraus!

+1

warum melden Sie sich an erster Stelle? – UmNyobe

Antwort

3

1 log für Nachrichten - Call SystemOut.log es

1 log für Stack-Traces - nennen es

1 log Spuren SystemErr.log - Nennen Sie es trace.log

1 log für nativer stdout - Nennen sie es nativeStdOut.log

1 log für native stderr - Nennen sie es

nativeStdErr.log

eine Config-Panel haben, der setzt:

Wenn ein Protokoll die maximale Größe erreicht, wird mit dem Rollen bis maxCount begonnen und ein Zeitstempel an den gerollten Dateinamen angehängt.

0

Ich denke, dass eine gute Lösung wäre, Ihre Threads zu benennen und Protokolle zusammen mit dem Namen des Threads, in dem Protokoll aufgetreten ist, zu schreiben. Dadurch sind Sie in der Lage, beide Analyseprotokolle für jeden Thread einzeln zu analysieren oder alle Protokolle zusammen zu analysieren.

0

Normalerweise gibt es eine Protokolldatei pro Anwendung (Prozess) - selten für Thread und niemals Exception. Manchmal ist diese Protokolldatei in verschiedene Protokollebenen unterteilt: Debug-Meldungen in einem Bucket, Informationen in einem anderen, Warnungen/Fehler in einem dritten. Dies macht es einfach, nach Fehlern zu suchen, indem nur die Warnung und die kritischere Datei betrachtet werden.

log4j verfügt über eine Konfigurationsdatei, in der Sie bestimmte Nachrichten mithilfe verschiedener Kriterien an bestimmte Dateien weiterleiten können. Hier ist ein Beispiel der log4j-Eigenschaftsdatei:

# default is WARN and above going to the appender "logfile" and STDOUT 
log4j.rootLogger=WARN, logfile, stdout 
# write to ui.log for a day and then move to .yyyy-MM-dd suffix 
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logfile.File=ui.log 
log4j.appender.logfile.Append=true 
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd 
# but we log information message from classes in the package com.mprew.be 
log4j.logger.com.mprew.be=INFO 

log4j und benutzerdefinierte Logger, schmücken jedes Mal mit einer Class Namen, Priorität, Datum/Uhrzeit, etc .. Zum Beispiel:

# date  time  priority Class-name Log message 
2012-03-26 00:55:39,545 [INFO] CmsClientTask Content is up-to-date 

In der Regel werden Ausnahmen als mehrere Zeilen ausgegeben, sodass Sie den gesamten Stack-Trace abrufen können.

2012-03-26 01:55:35,777 [INFO] ExceptionInterceptor Reporting problem to customer 
    org.springframework.NoSuchRequestException: No request handling method 
    at com.ui.base.BaseController.invokeNamedHandler(BaseController.java:240) 
    at com.ui.base.BaseController.handleRequestInternal(BaseController.java:100) 
    at com.ui.base.CoreServices.handleRequest(CoreServicesController.java:147) 
    ... 

In unserem verteiltes System, wir Route alle Protokolle von allen System zu 2 Server, die ein debug, info, und Warnprotokolle schreiben. Zusammen mit dem Datum/der Uhrzeit, dem Klassennamen, der Priorität und der Nachricht haben die Protokollnachrichten auch den Hostnamen und ein bestimmtes Protokoll-Token, so dass wir problemlos Klassen von Problemen identifizieren können. Das Folgende ist in einer Zeile:

2012-03-26 00:00:00.045 UTC INFO FE8 TrayController TRAY_CLIENT_LOOKUP 
    message=created unknown client with partner STW9 

Dann können wir leicht für bestimmte Probleme grep.

Hoffe, das hilft.

Verwandte Themen