2008-09-08 20 views
4

Ich entwerfe eine Anwendung, die alle eingehenden Nachrichten, die ich von einer Telnet-Verbindung empfange, protokolliert. Der Text ist größtenteils einfach, kann jedoch ANSI-Tags enthalten, die Textfarbe und -formatierung (16 Farben, fett, unterstrichen usw.) bereitstellen.Was ist eine gute Möglichkeit, Protokolle zu formatieren?

Ich möchte meine Protokolle formatieren, um den Text mit Formatierung, Datum/Uhrzeit und möglicherweise anderen Metadaten später zu speichern. Mein erster Gedanke war alles XML, aber das könnte meine Fähigkeit beeinflussen, später ein schnelles Suchwerkzeug zu schreiben. Meine aktuelle Idee ist Datum/Uhrzeit + Text in einer Datei mit Metadaten, die in einer anderen XML-Datei gespeichert sind, die durch die Zeilennummer referenziert wird.

Ist das eine gute Lösung? Wo und wie sollte ich die Formatierungsbefehle speichern? Die ursprünglichen ANSI-Tags würden die Ebene stören, aber sie in zwei verschiedenen Dateien zu haben, könnte peinlich sein.

Zusätzlich: Dank einiger Antworten, obwohl ich erwähnen sollte, dass die Nachrichten die meiste Zeit von Person zu Person Kommunikation statt Systemnachrichten sind. Ein primitiveres IRC. Es liegt an meinem Benutzer, später (durch Hinzufügen von Metadaten) zu entscheiden, welche Nachrichten wichtig waren. Dies ist der Rohdatensatz im Protokoll, von dem gefilterte oder bearbeitete Protokolle abgeleitet werden können.

Antwort

0

Wenn Sie Protokollinformationen für zukünftige Suche und Analyse erfassen, wäre vielleicht eine Datenbank eine bessere Antwort.

Wie für Ihre Lösung. Flache Dateien skalieren überhaupt nicht gut, wenn sie als Datenbank viel besser skaliert werden. Ich würde die Dateien auch nicht aufteilen, was das Skalierbarkeitsproblem nur verschärft. Wenn Sie eine flache Datei verwenden müssen, würde ich wahrscheinlich versuchen, die Metadaten in einem csv (weniger über Kopf) und die Daten in einer Reihe von Dateien, die von der CSV-Datei indiziert werden. Auf diese Weise haben alle Daten keinen Einfluss auf Ihre Indexdatei. Nur meine Gedanken.

+0

ich automatisches Aufteilen von Dateien zu einem späteren Zeitpunkt hinzugefügt werden. Eine Datenbank für diese Situation ist ein bisschen schwergewichtig und ich möchte, dass Protokolle auch alleine stehen können. – Nidonocu

1

G'day,

Auf jeden Fall tun, um die Protokollierung in Flat-Datei und fügen Sie munge Skripte später in XML zu verwandeln.

Der erste Vorschlag wäre, sicherzustellen, dass alle Datum/Uhrzeit-Zeichenfolgen im Format ISO 8601 sind, nämlich JJJJ-MM-TT hh: mm: ss.

Zweitens ist es, Ihre Kategorien, z. Ausnahme, fatal, Fehler, Warnung, Info, etc. heben sich in Ihren Protokollen ab.

Dann schauen Sie sich einige der vim-Syntaxdateien an und erstellen Sie eine neue Syntax für Ihr Protokollformat, damit wichtige Protokolleinträge wirklich hervorstechen.

Es ist nicht wirklich schwierig, eine der Standard-Syntaxdateien zu übernehmen und sie so zu modifizieren, dass sie mit Ihren Protokollfolgen umgehen kann.

HTH.

prost,

Rob

2

Mein erster Vorschlag ein Drop-in-Logging-Tool wie log4net zu verwenden wäre, die viel automatische machen Formatierung.

Wenn Sie die Route von zwei Dateien gehen (und ich stimme Craig, dass eine Datenbank ist wahrscheinlich eine bessere Wahl), können Sie sich wahrscheinlich eine Menge Kummer speichern, indem Sie eine Datei, die so dünn wie Sie ist kann es für spätere schnelle Suchen machen und eines, das alle Informationen an einem Ort enthält (Metadaten und Daten), anstatt ein nur-Metadaten-Format zu erstellen.

0

Ich werde "den Zaun teilen" und sagen, verwenden Sie die Datenbank für alle Ihre Analyse/Archivierung Protokolleinträge (z. B. Ihre Telnet-Kommunikation). Dadurch erhalten Sie die Vorteile der Volltextsuche, der Spalten und der einfachen Suche nach den Daten.

Verwenden Sie eine flache Datei (oder das XML-Format, da die Datei nicht zu groß sein sollte) für alle Debug/kritischen Fehlertypprotokolle.

Wenn Sie eine beschädigte Datenbankverbindung haben oder etwas mit Ihrer Tabellenstruktur verkehrt ist, wird die Protokollierung in der Datenbank bedeutungslos.

Wenn Sie nach einer etwas "leichteren" Lösung suchen, könnten Sie SQLite verwenden, um Ihren gesamten Telnet-Verkehr zu protokollieren, damit Sie den Vorteil der DB-Struktur nutzen, aber auch die Verfügbarkeit haben der Datei.

Mit einem weiteren Hinweis auf log4net, könnten Sie dies leicht mit dem ADO-Appender, den sie haben, erreichen.

0

Ich bin mir nicht sicher, was genau Sie erreichen möchten. Telnet wird normalerweise als Zeichen-zu-Zeit-Protokoll betrachtet. Wenn Sie also "eingehende Nachrichten" sagen, meinen Sie, dass es sich bei jedem Zeichen um eine Nachricht handelt? Oder die Sitzung des gesamten Benutzers ist eine Nachricht?

Ich werde einige Annahmen treffen. Sie haben sich über Telnet angemeldet und möchten alles erfassen, was sie tun, während sie eingeloggt sind. Später möchten Sie in der Lage sein, die Dinge, die sie mit diesem Benutzer gemacht haben, mit der Uhrzeit und dem Datum zu verknüpfen. Sie müssen in der Lage sein, später zu suchen, um herauszufinden, "wer hat 'rm *' als root?"

Ich würde die Sitzung jedes Benutzers als separate Datei speichern, mit einer Namenskonvention, die die Benutzeranmeldung und einen Zeitstempel enthält.

z.B. 2008_09_08_14_52_07_nidonocu

Innerhalb der Datei würde ich jedes empfangene Byte erfassen, vorausgesetzt, dass es sich meistens um reine Textzeichen handelt.

z.B.

ls 
cd www 
ls 
vi index.html 
/copyright 2007 
llllllllllllr8:wq 
exit 

Schreiben Sie auch die 8-Bit-ANSI-Zeichen in die Datei. Sie sollten in der Lage sein, einen Texteditor und Grep zu verwenden, um grundlegende Audits und Suchen durchzuführen. Sie können einen Binärdatei-Viewer verwenden oder später ausgefeilter werden, wenn Sie die 8-Bit-Daten tatsächlich lesen müssen.

Backups, Archivierung, Bereinigung usw. können mit normalen Dateisystem-Tools und Skripts durchgeführt werden.

Ich entschuldige mich, wenn meine Annahmen falsch sind.

-
Bruce

Verwandte Themen