Ich versuche, ein Perl-Skript zu schreiben, um eine log4net-Protokolldatei zu verarbeiten. Die Felder in der Protokolldatei sind durch ein Semikolon getrennt. Mein Endziel ist es, jedes Feld zu erfassen und eine MySQL-Tabelle zu füllen.Verwenden von Perl, um über mehrere Zeilen zu teilen
Normalerweise habe ich Linien, die ein wenig wie folgt aus (alle in einer einzigen Zeile) aussehen
DEBUG;2017-06-13T03:56:38,316-05:00;2017-06-13 08:56:38,316;79ab0b95-7f58-
44a8-a2c6-1f8feba1d72d;(null);WorkerStartup 1;"Starting services."
Diese sind leicht zu verarbeiten. Ich kann einfach durch Semikolon teilen, um die Informationen zu bekommen, die ich brauche.
Gelegentlich kann sich das Feld "Nachricht" am Ende jedoch über mehrere Zeilen erstrecken, insbesondere wenn eine Stapelverfolgung vorhanden ist. Ich möchte die gesamte Nachricht als eine einzige Spalte erfassen. Ich kann nicht gespalten durch Semikolon verwenden, da die nächsten Zeilen typischerweise aussehen würde:
at some.random.classname
at another.classname
...
Kann jemand ein paar Tipps geben, wie dieses Problem zu lösen?
Suchen Sie nach einem del imiter und setze '$ /'. – Sobrique
Könnten Sie näher ausführen? Nicht sicher was du meinst? –
Sie wissen, wie Sie den * Start * eines Protokolleintrags identifizieren. Verwenden Sie diese Informationen, um weitere Zeilen zu sammeln, bis Sie einen anderen Protokolleintrag treffen. –