Blockschema Logging mit Log4J

Ben Letzel

Grünschnabel
Guten Tag liebe Kollegen,

ich habe folgendes Problem:
Ich habe mich vor einigen Tagen durch die API des Apache Frameworks Log4J durchgeschlagen und habe auch einige Sachen ausprobiert um ein Logging in eine Art Blockschema darzustellen.
Das Logging bezieht sich auf ein Transfer einer Datei zum Finanzamt, wobei ich für jede zu transferierende XML-Datei einen eindeutigen "Log-Datensatz" haben möchte um diesen später in der GUI darstellen zu können. Dazu habe ich eine Klasse implementiert, die die einzelnen Pattern der Log aufnimmt.
Um das etwas genauer auf den Punkt zu bringen werde ich mal zeigen wie ich es realisiert haben möchte
Im Log soll es folgendermaßen aussehen:

[Transfer=fref.xml]
(15 08 2011 13:37:43) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 13:40:30) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 13:41:01) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 13:59:39) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:00:13) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:26:07) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:26:37) ELSTER_ERROR - fehlercode - Fehlermeldung
[Ende]
[Transfer=xml.xml]
(15 08 2011 14:26:37) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:26:37) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:26:37) ELSTER_ERROR - fehlercode - Fehlermeldung
(15 08 2011 14:26:37) ELSTER_ERROR - fehlercode - Fehlermeldung
[Ende]
[Transfer=xml.xml]
(15 08 2011 15:26:15) ELSTER_OK - 0 - Transfer erfolgreich
[Ende]

Dabei ist zu beachten, dass eine XML-Datei mehrmals im Log stehen kann z.B. wenn der Transfer beim ersten mal Fehlgeschlagen ist ein erneuter Transfer versucht wird und ggf. dieser erfolgreich war.

In der GUI soll dies später so aussehen, dass es für jeden geloggten Transfer ein Klapp-Menü gibt, wo schließlich die detaillierten Fehlermeldungen der Datei angezeigt werden.

Ich hoffe ihr könnt mir bei dem Thema weiterhelfen.

Lg Ben.
 
Hi und herzlich Willkommen bei Tutorials :),
was mich jetzt noch interessieren würde, wäre deine konkrete Frage und ob der Transferprozess ein Programmlauf ist, oder eben nur ein Teilprozess?

Gruß

Fabio
 
Ich würde sagen ein Programmlauf, da mehrere Methoden aufgerufen werden und die Rückgabewerte zurückgeliefert werden bzw. die Fehlermeldungen wenn eine Exception geworfen wird. Dann rufe ich eine Methode meiner Logger Klasse auf die sagt addLog(). Diese soll dann anschließend die Rückgabewerte und so weiter, wie oben dargestellt, in die Datei Loggen und in eine Liste packen um diese dann an die GUI zu pushen.
 
Mh, nein, du hast meine Frage glaub ich mal falsch verstanden.
Also meine Frage war, ob der Programmablauf so aussieht...
1. Programmstart
2. Transfer der XML-Datei
3. Logeintrag
4. Programmende
... oder eben anders.

Es wäre auch nicht schlecht, wenn du deinen Code posten könntest, damit wir dir dann besser weiterhelfen können.
 
Eigentlich hat das weniger mit dem Code zutun.
Meine eigentliche frage ist: Gibt es eine Möglichkeit eine strukturierte Darstellung in einer Log mit Hilfe dieses Frameworks zu erstellen? Wichtig ist für mich die Eindeutigkeit der einzelnen Blöcke im oben beschriebenen Schema auch wenn ein Transfer einer Datei mehrmals vor kommt.
 
Kla ist das möglich. Du kannst, wenn du in deine Logeinträge machst, doch einen String übergeben. Dann schreibst du in den String rein:
log.info("Transfer XML-File:"+file.getPath);
...
log.error("Transfer failed - "+errorcode+" - "+exception);
...
log.info("Transfer exit");
 
Achsoooooooo. Natürlich. Das habe ich anscheinend in der API übersehen ...
Nein mal ehrlich, das war mir schon vorher bewusst. Anscheinend wurde mein erster Beitrag nicht verstanden.
Ich möchte ein EINDEUTIGES Blockschema

[TRANSFER "xml.xml" - Datum(Begin des Transfers)]
...
Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
...
[ENDE]

Die Log-Datei soll nicht nur einfach ausgelesen werden und runtergerattert im Debug-Modus in der GUI angezeigt werden.
Ich denke meine Oma würde das nicht verstehen bzw. Hätte keine Lust das alles durchzulesen.
In der GUI soll später jeder Transfer damit gekennzeichnet werden ob er Erfolgreich war oder nicht. Wenn erfolgreich, ein grünes Häckchen keine Fehlermeldungen. Wenn fehlgeschlagen rotes Kreuzchen, Liste von lesbaren und verständlichen Fehlermeldungen für den Ottonormalverbraucher.
Deshalb dieses Blockschema um eine Eindeutigkeit festzulegen.
Wenn nämlich die Log folgendermaßen aussehen würde:

...
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
Datei - Datum - LoggingTyp (z.B. Error usw.) - ErrorCode - Errormsg
...
Gäbe es keine Eindeutigkeit.
 
Ich hab mal so ne andere blöde Frage : warum lässt du erst alles loggen und machst dir dann die Mühe dieses Log wieder so aus ein ander zu nehmen ?
Mach das doch einfacher :
Objekte erstellen die das XML spezifizieren , eine globale Statusvariable : noch zu senden / gesendet / senden fehlgeschlagen und einen Vector / List / sonst was um aufgetretene Fehlermeldungen darin zu speichern. Das würde auf jeden Fall das verarbeiten in der GUI deutlich vereinfachen als wenn du dir dann noch n Log-Parser zusammenbaust , damit auch Probleme hast und dann für eine eigentlich so einfache Lösung einen so riesen Umweg baust.

Oder kurz : Konzeptionsfehler
 
Zurück