2010-01-18 9 views
10

Ich habe kürzlich etwas Arbeit gemacht, die ziemlich ausführlich war, Ich fragte mich, was Sie denken, ist besser für die Protokollierung. Ist es besser zu.Bewährte Methoden zum Erstellen eines Log-Writers für Fehler

A. Jedes Mal, wenn ich auf mein Protokoll schreiben möchten, öffnen Sie die Datei, schreiben Sie es dann sofort schließen, so dass es dort keine echte Chance ist Informationen im Falle eines kritischen Fehler oder Absturz zu verlieren.

B. Sparen Sie in regelmäßigen Abständen, vielleicht nachdem jeder wichtige Abschnitt beendet wurde, was bedeutet, dass ich Downs eingrenzen kann, wo die Fehler sind.

Irgendwelche anderen Vorschläge ?? Ich möchte nicht den ganzen Tag mit der großen Menge an Text öffnen und speichern Ich muss aufzeichnen, aber ich möchte meine Granularität der Informationen nicht verlieren. Ich schreibe in C++, tut mir leid, dass ich es vorher nicht erwähnt habe.

Antwort

5

Nach meinem Wissen ist es ziemlich üblich (mandated?) Für eine Stream-Spülung, um das Äquivalent zum Speichern zu sein.

Das heißt, wenn Sie sagen:

file.flush(); 

Alles geschrieben werden noch geschrieben wird. Beachten Sie, dass std::endl; auch flush aufruft. Also, lassen Sie es offen und spülen Sie nur nach einem Dump von Informationen.

+0

Nun, ich habe bereits den grundlegenden Textlogger geschrieben, aber ich denke, in Zukunft nach diesem Projekt werde ich eine Bibliothek verwenden, also danke an die Leute, die diese Bibliotheken für mich fallen gelassen haben. – Craig

0

Auf Unix-Systemen haben Sie etwas namens Syslog (das ist übrigens sowohl ein Bibliotheksaufruf, zusammen mit Openlog und Closelog, und ein Dienst). In Windows glaube ich, dass es das Ereignisprotokoll gibt, kenne die API dafür aber nicht.

Wie auch immer, da Syslog (und das Ereignisprotokoll in Windows) über IPC (manchmal sogar remote über das Netzwerk) protokolliert wird, ist der Prozess entkoppelt und wird nicht von Ihrem Programmabsturz beeinflusst. Auf diese Weise werden Sie auch die Verantwortung für das Speichern der Datei im syslog-Dienst ablegen. Beachten Sie, dass dies Dinge wie Logrotation und Komprimierung von Logfiles beinhaltet, sowie Ihnen die Möglichkeit gibt, standardisierte Tools zum Auswerten der Logfiles (z.B. IDS) zu verwenden.

Nun, das sagte, das System abstürzt (Stromausfall, oder was auch immer) ist eine ganz andere Geschichte, ich weiß nicht, ob das Ihr Anliegen ist, wenn Sie ein wenig auf was Art von System, an dem Sie arbeiten, könnte es einfacher sein, etwas passenderes zu empfehlen.

+0

Es ist eine große Menge an Bildverarbeitung, mit großen sehr großen Bildern (3GB +) und mit mehreren Prozessen, Divisionen, Sub-Tauchen Manipulationen. Sowie Bilder, die als große binäre Dateien (meist Höhendaten und Längen- und Breitengrad) und String-Verarbeitung Dateien gespeichert sind, die Informationen über die Bilder haben. – Craig

2

Die beste Lösung ist, eine vorhandene Bibliothek dafür zu verwenden. Es gibt viele gute, gut getestete und beliebte Bibliotheken. In der Regel bieten sie Ihnen die Vielseitigkeit, die Sie benötigen, und ersparen Ihnen die Verwaltung von Dateien. Darüber hinaus können Sie Ihre Protokolle auf verschiedenen Zielen und nicht unbedingt auf Dateien speichern. Ich verwendete Google Log-Bibliothek und ACE:

ACE ist eine große Bibliothek und Protokollierung ist nur ein kleiner Teil davon, wenn Sie also nur die Protokollierung benötigen, vielleicht ist es keine gute Wahl. Wie auch immer, versuchen Sie nicht, die Protokollierung selbst zu implementieren, speichern Sie die Mühe für etwas Nützlicheres; es sei denn, Sie haben ein besonderes Interesse am Loggen von Motoren.

1

A. Jedes Mal, wenn ich auf meine Protokoll schreiben möchten, öffnen Sie die Datei, schreiben Sie es dann es schließen sofort, so dass es dort ist keine wirkliche Chance Informationen zu verlieren im Falle eines kritischen Fehler oder Absturz.

B. periodisch speichern, vielleicht nach jeder größeren Abschnitt beendet wurde Sinn kann ich Tiefen verengen, wo die Fehler sind.

Irgendwelche anderen Vorschläge ??

Gönnen Sie Ihrem Gehirn noch etwas länger - Sie werden mit Dutzenden anderer Ideen aufwarten. Das Problem besteht darin, einen Logger zu schreiben, der so komplex gemacht werden kann, wie Sie möchten - Logger können selbst zu vollwertigen Software-Stücken werden.

Here ist ein Artikel, den ich auf dem Design von Logger-Klassen sehr gemocht habe. Schau mal.

Wenn Sie nicht bereit/nicht die Bandbreite haben, um die Erstellung eines neuen Moduls für die Protokollierung zu unterstützen, gehen Sie für eine vorhandene Bibliothek, wie andere bereits vorgeschlagen haben.

Wie wählen Sie die richtige Bibliothek? Die Sache, über die Sie sich wirklich Gedanken machen sollten, ist, welche Art von Protokollen Sie haben möchten und in welchem ​​Entwicklungsstadium Sie sich befinden. Sortieren Sie Ihre Nachrichten und sehen Sie, ob die Bibliothek diese eindeutig und konsistent klassifiziert. Benötigen Sie mehrere Senken für Ihre Nachrichten? Unterstützt Ihre Bibliothek das? Wenn Ihr Code in Produktion ist, müssen Sie sich etwas mehr Sorgen machen. Benötigen Sie ein Transaktionsprotokollsystem? Benötigen Sie Atomizität von Operationen (und damit Logs)? Benötigen Sie die Möglichkeit, Nachrichten zurückzusetzen?

Hoffe, das hilft.

Verwandte Themen