xml-Log-Datei



  • Wie der Titel schon sagt, möchte ich meinem Programm eine Log-Datei im xml-Format spendieren, die ich dann mit xsl leichter auswerten kann.
    Allerdings hab ich ja jetzt ein Problem: Da nur ein Element auf höchster Ebene erlaubt ist, muss ich bei einem Programm-Absturz ja die xml-Datei noch reparieren - indem ich das end-Tag von Hand ranschreibe...

    Hat XML hierfür vielleicht irgend eine versteckte Option/..., sodass die schließenden Tags automatisch reininterpretiert werden?

    Ich kann zwar (ein wenig umständlich) alle Software-Exceptions abfangen und wenigstens dann das schließende Tag hinzufügen aber damit bleibt die Datei ja weiterhin unbrauchbar falls der Prozess vom OS gekillt wird oder der PC so gar abstürzt...

    Danke schon mal - bb ^^



  • hm
    lass halt ein script drüber laufen, dass die tags schliesst.



  • warum nicht
    - root node erstellen
    - speichern
    - sonstige nodes im speicher erstellen und hin und wieder speichern lassen
    dann muesste es genau in dem zeitpunkt des speicherns abstuerzen - ist schon sehr unwahrscheinlich



  • Schreibt das Log doch als plain text file und konvertiere es on-the-fly vor der Auswertung in xml.



  • sonstige nodes im speicher erstellen und hin und wieder speichern lassen

    und wenn das programm abstürzt, hab ich noch nen viel größeres prob, da ich die letzten Einträge wahrscheinlich nicht habe?!

    Schreibt das Log doch als plain text file und konvertiere es on-the-fly vor der Auswertung in xml.

    damit würde ich mir alle xml-vorteile zu nichte machen, weil ich ja immer die länge des eintrages speichern müsste etc

    lass halt ein script drüber laufen, dass die tags schliesst.

    so werd ich es wohl machen müssen - dachte aber halt, dass es vll ne möglichkeit gibt ohne erst mal alles zu parsen...

    danke : >



  • unskilled schrieb:

    sonstige nodes im speicher erstellen und hin und wieder speichern lassen

    und wenn das programm abstürzt, hab ich noch nen viel größeres prob, da ich die letzten Einträge wahrscheinlich nicht habe?!

    stimmt, war ne doofe idee {o;

    unskilled schrieb:

    Schreibt das Log doch als plain text file und konvertiere es on-the-fly vor der Auswertung in xml.

    damit würde ich mir alle xml-vorteile zu nichte machen, weil ich ja immer die länge des eintrages speichern müsste etc

    was fuer eine laenge? du kannst doch zeile fuer zeile auslesen und diese zeile dann markieren, oder hast du log eintraege die ueber mehrere zeilen gehen ? wenn ja, versuchs doch ma mit einer vorangegangenen zeit
    sobald eine neue zeit vorne ist ist der rest bis zur naechsten zeit oder dateiende das comment {o;

    unskilled schrieb:

    lass halt ein script drüber laufen, dass die tags schliesst.

    so werd ich es wohl machen müssen - dachte aber halt, dass es vll ne möglichkeit gibt ohne erst mal alles zu parsen...

    danke : >

    najaaaaa - schon - nur ob du ein script benutzt was tags sucht und schliesst bei bedarf, oder ein converter "Log2Xml" - find ich den converter sinnvoller und vor allem einfacher

    zb

    12/18/2008 07:41:25 - connect to server
    12/18/2008 07:42:51 - get projects data
    12/18/2008 07:55:03 - fail: connection timeout
    connection was reset by peer
    12/18/2008 08:15:33 - connect to server
    12/18/2008 08:16:20 - get projects data
    12/18/2008 08:18:00 - fail: connection timeout
    connection was reset by peer
    

    das convertieren zu

    <root>
        <entry>
            <datetime>12/18/2008 07:41:25</datetime>
            <message>connect to server</message>
        <entry>
    </root>
    

    oder so aehnlich
    man kann ja sagen - alles was zwischen zwei zeiten ist oder zwischen zeit und dateiende ist eine message



  • Mr Evil schrieb:

    unskilled schrieb:

    Schreibt das Log doch als plain text file und konvertiere es on-the-fly vor der Auswertung in xml.

    damit würde ich mir alle xml-vorteile zu nichte machen, weil ich ja immer die länge des eintrages speichern müsste etc

    was fuer eine laenge? du kannst doch zeile fuer zeile auslesen und diese zeile dann markieren, oder hast du log eintraege die ueber mehrere zeilen gehen ? wenn ja, versuchs doch ma mit einer vorangegangenen zeit
    sobald eine neue zeit vorne ist ist der rest bis zur naechsten zeit oder dateiende das comment {o;

    Ne, das geht alles net so richtig, weil ich nicht mit Sicherheit sagen kann, was im Log-Eintrag an sich steht (also könnte dort ja auch zufällig nicht nur nen Zeilenumbruch sein sondern auch noch ne Uhrzeit ganz vorn stehen -.-)

    Mr Evil schrieb:

    unskilled schrieb:

    lass halt ein script drüber laufen, dass die tags schliesst.

    so werd ich es wohl machen müssen - dachte aber halt, dass es vll ne möglichkeit gibt ohne erst mal alles zu parsen...

    najaaaaa - schon - nur ob du ein script benutzt was tags sucht und schliesst bei bedarf, oder ein converter "Log2Xml" - find ich den converter sinnvoller und vor allem einfacher

    Also ich fände das mit den Tags schließen einfacher und vor allem Unabhängiger ^^ Ich denke, so werde ich es auch machen - aber mal gucken ^^

    bb



  • wenn da ein log eintrag ist der genau so heisst wie ein tag? ist doch das selbe in gruen

    fuer den log output koenntest du dir ja ne syntax ausdenken
    zb

    log[12/18/2008 07:41:25] - xxxx
    "log[12/18/2008 07:41:25]" muss so vorkommen #gg



  • nein, weil es in xml so etwas gibt:

    <![CDATA[LOG-INHALT]]>
    

    da kann also nur was schiefgehen, wenn ]]> vorkommt - also trenn ich vor jedem ]> einfach den string und pack das in verschiedene CDATA-tags... imho die beste variante...

    bb



  • Habe auch mal ein XML-Logsystem entworfen und mir dort so beholfen, dass jedes mal die schließenden Tags reingeschrieben wurden und beim nächsten mal loggen den Filepointer verschoben habe und dann die schließenden Tags überschrieben habe und wieder hinten angefügt, usw.

    Nachträglich ein Skript drüberlaufen zu lassen wäre natürlich eine Möglichkeit, darauf bin ich damals gar nicht gekommen 😃



  • Was ist denn an Struktur in deinen Log-Dateien, dass du da unbedingt XML für haben willst? Dass man das normalerweise in reine Textdateien schreibt hat ja durchaus seine Gründe, z.B. die garantierte Konsistenz dadurch, dass die Datei nur im append-Modus geöffnet werden muss. Meines Erachtens ist auch die Lösung, die Mr.Evil vorgeschlagen hat, die Logs mit einem kleinen Konverterskript zu übersetzen die Beste. Was spricht denn genau dagegen? Den XSLT-Prozessor kannst du ja auch aus dem Skript heraus aufrufen.



  • Tippgeber schrieb:

    Habe auch mal ein XML-Logsystem entworfen und mir dort so beholfen, dass jedes mal die schließenden Tags reingeschrieben wurden und beim nächsten mal loggen den Filepointer verschoben habe und dann die schließenden Tags überschrieben habe und wieder hinten angefügt, usw.

    Nachträglich ein Skript drüberlaufen zu lassen wäre natürlich eine Möglichkeit, darauf bin ich damals gar nicht gekommen 😃

    Daran hab ich auch schon gedacht, hatte ich dann aber für unnötig gehalten - und besser ist es auch nicht (falls der PC beim schreiben abschmiert hast du genau das selbe problem, wie ich es jz habe ^^)

    .filmor schrieb:

    Was ist denn an Struktur in deinen Log-Dateien, dass du da unbedingt XML für haben willst? Dass man das normalerweise in reine Textdateien schreibt hat ja durchaus seine Gründe, z.B. die garantierte Konsistenz dadurch, dass die Datei nur im append-Modus geöffnet werden muss. Meines Erachtens ist auch die Lösung, die Mr.Evil vorgeschlagen hat, die Logs mit einem kleinen Konverterskript zu übersetzen die Beste. Was spricht denn genau dagegen? Den XSLT-Prozessor kannst du ja auch aus dem Skript heraus aufrufen.

    Es spricht dagegen, dass ich dann nicht mehr alles loggen könnte - falls ich das doch will, müsste ich aufwendige konvertierungen vornehmen (>, <, ", ... ersetzen) - so muss ich nur nach ]]> suchen...
    Um das Skript werde ich wohl nicht drum rum kommen, wenn ich auch für einen "richtigen" Programmabsturz die log einsehen will ohne sie vorher von Hand zu bearbeiten. Allerdings weiß ich noch nicht genau, wie ich da vorgehen sollte - ich will ja den evtl beschädigten letzten eintrag nicht verwerfen - aber ich werd wohl einfach vom letzten öffnenden log-eintrag-tag an gucken, ob dort alles iO ist und dann ggf schließende Tags setzen...

    bb



  • unskilled schrieb:

    .filmor schrieb:

    Was ist denn an Struktur in deinen Log-Dateien, dass du da unbedingt XML für haben willst? Dass man das normalerweise in reine Textdateien schreibt hat ja durchaus seine Gründe, z.B. die garantierte Konsistenz dadurch, dass die Datei nur im append-Modus geöffnet werden muss. Meines Erachtens ist auch die Lösung, die Mr.Evil vorgeschlagen hat, die Logs mit einem kleinen Konverterskript zu übersetzen die Beste. Was spricht denn genau dagegen? Den XSLT-Prozessor kannst du ja auch aus dem Skript heraus aufrufen.

    Es spricht dagegen, dass ich dann nicht mehr alles loggen könnte - falls ich das doch will, müsste ich aufwendige konvertierungen vornehmen (>, <, ", ... ersetzen) - so muss ich nur nach ]]> suchen...

    Aufwändig? Seit wann ist denn Textersetzung aufwändig? Und tatsächlich war es das aufgelistete (bis auf ' und &) schon, was aber dein Skript ohne weiteres für dich übernehmen würde, wenn du eine halbwegs anständige XML-Bibliothek benutzt.

    Wie gesagt, Konsistenz der eigentlichen Log-Datei bekommst du damit automagisch.



  • Wenn du deine Logfiles später in Excel auswerten willst, könntest du auch einfach .csv-Dateien erstellen...


Log in to reply