Logging von Exceptions

bloodyrocky

Mitglied
Hi zusammen,

die Frage ist eher von konzeptioneller Natur als technischer. Es geht um das Loggen von Exceptions. Hier gibt es bekanntlich mehrere Wege die zum Ziel führen. Ich würde gerne die Exceptions in eine Datei schreiben, dazu könnte ich ein FileWriter nehmen, oder aber auch die Logger-Klasse oder, oder, oder. Ich habe einfach einmal die Logger-Klasse genommen, weil es mir am sinnvollsten erschien. Leider war das Ergebniss nicht so wie erwünscht. Die Bildschirmausgabe sah so aus:
Code:
10.06.2010 11:27:13 de.ergo_fit.cardea.test.TrainingPanel <init>
SCHWERWIEGEND: null
java.lang.Exception: Ich bin garnicht hier!
        at de.ergo_fit.cardea.test.TrainingPanel.<init>(TrainingPanel.java:59)
        at de.ergo_fit.cardea.test.PanelManager.loadPanel(PanelManager.java:33)
        at de.ergo_fit.cardea.test.StartPanel$1.actionPerformed(StartPanel.java:26)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        ...

Während die Ausgabe in der Datei ein XML-Format hat:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2010-06-09T17:50:41</date>
  <millis>1276098641672</millis>
  <sequence>0</sequence>
  <logger>de.ergo_fit.cardea.test.TrainingPanel</logger>
  <level>SEVERE</level>
  <class>de.ergo_fit.cardea.test.TrainingPanel</class>
  <method>&lt;init&gt;</method>
  <thread>10</thread>
  <exception>
    <message>java.lang.Exception: Ich bin garnicht hier!</message>
    <frame>
      <class>de.ergo_fit.cardea.test.TrainingPanel</class>
      <method>&lt;init&gt;</method>
      <line>59</line>
    </frame>

Zusätzlich wurde beim erneuten Programmstart nicht die Sequenz fortgesetzt, sondern ein neuer XML-Header geschrieben und dann erneut begonnen. Das gefällt mir nicht, ließe sich aber sicherlich durch formatieren der Logger-Ausgabe lösen. Ich glaube es war möglich die Ausgabe entsprechend anzupassen :bahnhof:

Nun zur eigentlichen Problematik. Ich möchte nichts weiter als eine Textdatei die wie folgt die Fehler loggt:
Code:
[2010/05/24 09:16:32] [Error] Klassenname: Fehlerbeschreibung

Sollte man soetwas durch formatieren des Loggers gestallten, oder doch eher durch simples Schreiben in ein Log mittels FileWriter? Was ist effizienter? Möchte jemand vielleicht Erfahrungen teilen 🙂
 
mit log4j:
Code:
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{ISO8601} %-5p %c{1} - %m%n" />
		</layout>

>Ich würd einfach log4j benutzen...

noch besser slf4j mit log4j-Adapter
 
Hi,

erstmal danke! Ich habe mir mal kurz die Bespiele auf den Projektseiten angeschaut. Scheint ja so zu funktionieren wie die Logger-Klasse in Java selbst (von der Benutzung). Hier scheint aber alles zu sein was ich brauche.
 
Beim Java-Logger kann man angeben, ob man es „normal“ oder als XML formatiert haben möchte; ebenso kann man angeben, ob an eine Datei angehängt oder sie überschrieben werden soll. Das geht beispielsweise so:
Java:
private static final Logger logger = Logger.getLogger(…);
static {
    FileHandler logFile = new FileHandler("zeug.log");
    logFile.setFormatter(new SimpleFormatter());
    logger.addHandler(logfile);
}
Es gibt da sicherlich noch Ausnahmen abzufangen, aber welche, vermag ich aus dem Kopf nicht zu sagen.

Du kannst auch noch beliebige weitere Handler hinzufügen, beispielsweise noch einen, um ein XML-Log zu schreiben, einen für die Konsolenausgabe; oder einen für die leichten, einen für die schweren Fehler.

Das wollte ich nur noch loswerden, falls es hier Leute gibt, die wie ich nicht mögen, zusätzliche Bibliotheken zu verwenden. Für den normalen Hausgebrauch ist der Java-Logger sehr mächtig und komfortabel.
 
Hey Wortraum, danke für den Post! Finde es auch nicht so toll zusätzliche Bibliotheken einzubinden. Was mir nicht klar war, dass man so einfach Formatieren kann. Gut die Ausgabe entspricht nicht ganz dem was ich mir vorgestellt habe, aber genügt eigentlich auch, so dass ich den SimpleFormater nehmen werde. Jetzt muss ich mir nur noch überlegen was ich loggen muss. Wünsche schönes Wochenende!
 
Man kann sich auch einen eigenen Formatter schreiben, irgendwo fand ich dazu sogar gute Anleitungen. Allerdings nahm ich mir nie die Zeit, sondern gab mich mit dem SimpleFormatter zufrieden.
 
Der SimpleFormatter ist auch völlig ausreichend, das XML-Format in seiner "Reinform" war mir schlicht weg zu überladen. Ich denke mit dem SimpleFormatter habe ich alles was ich brauche, aber als noch recht unerfahrener Programmierer muss ich da jetzt erstmal meine Erfahrungen sammeln.
 

Neue Themen


Zurück
Oben