Warum verwenden die meisten Protokolldateien nur Text und kein Binärformat?


81

Protokollierung ist etwas, das notwendig ist, aber (relativ) selten verwendet wird. Als solches kann es in Bezug auf die Lagerung viel kompakter gemacht werden.

Beispielsweise werden die am häufigsten protokollierten Daten wie IP, Datum, Uhrzeit und andere Daten, die als Ganzzahl dargestellt werden können, als Text gespeichert.

Wenn die Protokollierung als Binärdaten gespeichert wurde, konnte viel Speicherplatz gespart werden, wodurch weniger Rotation und eine längere Lebensdauer der Festplatte erforderlich waren, insbesondere bei SSDs mit eingeschränkten Schreibrechten.

Einige mögen sagen, dass es ein so kleines Problem ist, dass es nicht wirklich wichtig ist, aber angesichts der Anstrengungen, die erforderlich sind, um einen solchen Mechanismus aufzubauen, macht es keinen Sinn, dies nicht zu tun. Jeder kann das für zwei Tage in seiner Freizeit machen, warum machen die Leute das nicht?


20
Ich würde Ihre Behauptung anfechten, dass die Leute das nicht tun. Viele tun es. Einige wissen es nicht, aber es gibt viele.
Servy


44
> Wenn die Protokollierung als Binärdaten gespeichert wurde, kann viel Speicherplatz gespart werden. In der Regel werden alte Protokolle komprimiert.
Leonbloy

89
Das Lesen eines Textprotokolls auf einer Maschine, die zur Hälfte kaputt ist, kann ein großer Vorteil gegenüber der Verwendung einer Binärdatei zur Analyse sein.
Tofro

23
Nach monatelangen Änderungen, um den Algorithmus ordnungsgemäß auf dem großen Cluster auszuführen, konnten wir immer noch keinen großen Leistungszuwachs feststellen. Als wir jedoch auf das Speichern der Protokolldateien in Binärdateien umstellten? Heilige Kuh, wir wagten nie zu träumen, dass die Leistung auf diesem Niveau sein könnte. Wie plausibel ist eine solche Geschichte?
null

Antworten:


163

systemdspeichert seine Protokolldateien im Binärformat. Die Hauptprobleme, die ich damit gehört habe, sind:

  1. Wenn das Protokoll beschädigt wird, kann es nur schwer wiederhergestellt werden, da spezielle Tools erforderlich sind
  2. sie sind nicht menschlich lesbar, so dass Sie nicht über Standardtools wie verwenden können vi, grep, tailetc , sie zu analysieren

Der Hauptgrund für die Verwendung eines Binärformats (meines Wissens) war, dass es als einfacher erachtet wurde, Indizes usw. zu erstellen, dh es eher wie eine Datenbankdatei zu behandeln.

Ich würde argumentieren, dass der Speicherplatzvorteil in der Praxis relativ gering (und abnehmend) ist. Wenn Sie große Mengen an Protokollen speichern möchten, ist das Zippen von gerollten Protokollen wirklich sehr effizient.

Alles in allem würden sich die Vorteile von Tooling und Vertrautheit in den meisten Fällen auf der Seite der Textprotokollierung verschlechtern.


3
Guter Punkt. Ich dachte sofort auch an systemd. Noch wichtiger ist hierbei, dass Ihre Anwendung nicht wissen muss, wie die Protokolldaten gespeichert werden. Es kann als Systemdienst bereitgestellt werden.
5gon12eder

97
"berühmt", eher wie "berüchtigt"
Whatsisname

4
pf (Firewall) meldet sich auch binär an, speziell im tcpdump-Format
Neil McGuigan,

3
@Hatshepsut Rolled logs: Die Protokollausgabe schreibt in eine Datei, etwa myapp.logbis Mitternacht, und verschiebt diese Datei dann myapp.log.1in eine neue myapp.logDatei und beginnt mit dem Schreiben in eine neue Datei. Und die Alten werden myapp.log.1bewegt myapp.log.2, und so weiter, sie rollen alle mit. Somit myapp.logist immer der aktuelle. Oder sie wechseln, wenn eine bestimmte Größe erreicht ist. Vielleicht setzen sie das Datum und die Uhrzeit in den Dateinamen. Viele Logging-Frameworks unterstützen diese Art von Dingen von Anfang an.
SusanW

13
@ Hatschepsut Der Begriff rotatingwird auch aus dem verwendet, was mir bekannt ist.
George D

89

Warum verwenden die meisten Protokolldateien nur Text und kein Binärformat?

Suchen Sie im Wikipedia-Artikel zur Unix-Philosophie nach dem Wort "text" , und finden Sie beispielsweise Aussagen wie:

McIlroy, damals Leiter des Bell Labs CSRC (Computing Sciences Research Center) und Erfinder der Unix-Pipe, [9] fasste die Unix-Philosophie folgendermaßen zusammen: [10]

Dies ist die Unix-Philosophie: Schreiben Sie Programme, die eines können und es gut machen. Schreiben Sie Programme, um zusammenzuarbeiten. Schreiben Sie Programme, um Textströme zu verarbeiten, da dies eine universelle Schnittstelle ist.

Oder zum Beispiel aus den Grundlagen der Unix-Philosophie ,

Kompositionsregel: Entwerfen Sie Programme, die mit anderen Programmen verbunden werden sollen.

Es ist schwer zu vermeiden, überkomplizierte Monolithen zu programmieren, wenn keines Ihrer Programme miteinander kommunizieren kann.

Unix-Tradition empfiehlt nachdrücklich, Programme zu schreiben, die einfache, textuelle, stream-orientierte und geräteunabhängige Formate lesen und schreiben. Unter klassischem Unix werden so viele Programme wie möglich als einfache Filter geschrieben, die bei der Eingabe einen einfachen Textstrom verarbeiten und bei der Ausgabe in einen anderen einfachen Textstrom umwandeln.

Trotz der weit verbreiteten Mythologie wird diese Vorgehensweise nicht bevorzugt, da Unix-Programmierer grafische Benutzeroberflächen hassen. Wenn Sie keine Programme schreiben, die einfache Textströme akzeptieren und ausgeben, ist es viel schwieriger, die Programme miteinander zu verknüpfen.

Textströme beziehen sich auf Unix-Tools wie Nachrichten auf Objekte in einer objektorientierten Einstellung. Die Einfachheit der Text-Stream-Schnittstelle erzwingt die Kapselung der Tools. Aufwändigere Formen der prozessübergreifenden Kommunikation, wie z. B. Remoteprozeduraufrufe, weisen eine Tendenz auf, Programme zu sehr mit den Interna des jeweils anderen zu verknüpfen.

Jeder kann das für zwei Tage in seiner Freizeit machen, warum machen die Leute das nicht?

Das Speichern der Protokolldatei in binärer Form ist nur der Anfang (und trivial). Dann müssten Sie Tools schreiben, um:

  • Zeigt die gesamte Protokolldatei an ( edit)
  • Zeigt das Ende des Protokolls an, ohne dessen Anfang zu lesen ( tail -f)
  • Nach Dingen in der Datei suchen ( grep)
  • Filtern, um nur ausgewählte / interessante Inhalte anzuzeigen (unter Verwendung eines beliebig komplizierten Filterausdrucks)
  • Senden Sie das Protokoll per E-Mail an eine andere Person, die nicht über Ihre Protokolldatei-Decoder-Software verfügt
  • Kopieren Sie ein Fragment der Protokolldatei und fügen Sie es ein
  • Lesen Sie die Protokolldatei, während das Programm (das die Protokolldatei erstellt) noch entwickelt und getestet wird
  • Lesen Sie Protokolldateien aus alten Versionen der Software (die beim Kunden bereitgestellt werden und ausgeführt werden).

Natürlich kann und tut Software auch binäre Dateiformate (z. B. für relationale Datenbanken), aber es lohnt sich (im Sinne von YAGNI ) normalerweise nicht, dies für Protokolldateien zu tun.


24
Dokumentation nicht vergessen! Ich habe vor ein paar Jahren einen binären Nachrichtenrekorder für ein System geschrieben, der eingehende Anfragen nach Regression / Replay protokollierte. Der einzige Weg, um diese schrecklichen Dateien zu verstehen, besteht darin, den Code zu betrachten, der sie liest / schreibt, und noch andere Teams verwenden sie und stellen Fragen zu ihnen. Schreckliche Dinge.
SusanW

2
Um fair zu sein, würde das Speichern Ihres Protokolls in einer SQLite-Datenbank in Kombination mit grundlegenden Abfragetools zum Lesen all die Funktionen bieten, die Sie bereits erwähnt haben. ;)
jpmc26

3
@ jpmc26 Ja, Sie können die Protokolldatei lesen, solange Sie sie irgendwie in ein Textformat konvertieren können ...
ChrisW

1
Wie bereits in anderen Kommentaren erwähnt: Textdateien können einfach und effizient komprimiert werden. Die Komprimierung muss jedoch nicht in den 'Daten' enthalten sein. Die Komprimierung könnte im Dateisystem erfolgen. So können Sie den Klartext für alle Tools verwenden und haben keinen verschwendeten Speicherplatz.
Bernd Wilke πφ

2
@ JefréN. Wenn ich tail -feine Multi-Gigabyte-Protokolldatei verwende, springt diese zum Ende der Datei (mit "Suchen" ohne "Lesen") und liest und zeigt dann nur das Ende der Datei an. Es muss nicht die gesamte Datei dekomprimiert / dekodiert werden.
ChrisW

49

Hier gibt es viele umstrittene Vermutungen.

Protokollierung war ein wesentlicher Bestandteil (fast) jedes Jobs, den ich hatte. Es ist wichtig, wenn Sie die Integrität Ihrer Anwendungen in irgendeiner Form überprüfen möchten. Ich bezweifle, dass es sich um eine "Randnutzung" handelt. Die meisten Organisationen, in die ich involviert war, halten Protokolle für sehr wichtig.

Das Speichern von Protokollen als Binärdatei bedeutet, dass Sie sie dekodieren müssen, bevor Sie sie lesen können. Textprotokolle zeichnen sich durch Einfachheit und Benutzerfreundlichkeit aus. Wenn Sie über die binäre Route nachdenken, können Sie Protokolle auch in einer Datenbank speichern, in der Sie sie abfragen und statistisch analysieren können.

SSDs sind heutzutage zuverlässiger als HDDs, und die Argumente gegen viele Schreibvorgänge sind weitgehend umstritten. Wenn Sie sich wirklich Sorgen machen, speichern Sie Ihre Protokolle auf einer normalen Festplatte.


19
"Sie können Protokolle auch in einer Datenbank speichern, in der Sie sie abfragen und statistisch analysieren können." Zuvor hatten wir ein benutzerdefiniertes Tool, das unsere (textbasierten) Protokolle zu genau diesem Zweck in eine Datenbank importiert.
Mason Wheeler

5
Ich denke, was OP mit _ "SSD mit eingeschränkten Schreibzugriffen" meint, ist die Tatsache, dass SSD über eingeschränkte Schreib- / Löschzyklen verfügt und zu viele Schreibvorgänge in einem Sektor die Lebensdauer des Geräts verkürzt haben. Sie meinte nicht, dass Schriften verloren gehen.
Tulains Córdova

4
@ TulainsCórdova: Ja, ich wusste was sie meinte.
Robert Harvey

2
@ DocSalvager: Ich habe nicht anders behauptet.
Robert Harvey

2
@ TulainsCórdova - Die Grenzen der SSD-Schreibzyklen sind heutzutage im Allgemeinen sehr hoch. Selbst kostengünstige SSDs für Endverbraucher haben Herstellergarantien für Schreibzyklen, die bis zum Hundertfachen der Größe des Geräts reichen, und MTBFs, mit denen Sie das Tausendfache der Kapazität des Geräts beschreiben können. Und in einer kommerziellen Umgebung sollten Sie höhere Endgeräte mit viel größeren Schreibzyklusgrenzen verwenden und diese mindestens in einem 5-Jahres-Zyklus ersetzen, es sei denn, Sie schreiben> 10% Speicherkapazität pro Tag, glaube ich nicht Es gibt etwas zu befürchten.
Jules

36

Protokolldateien sind ein wichtiger Bestandteil jeder seriösen Anwendung: Wenn die Protokollierung in der App fehlerfrei ist, können Sie sehen, welche Schlüsselereignisse wann stattgefunden haben. welche Fehler sind aufgetreten; und allgemeiner Anwendungszustand, der über die Überwachung hinausgeht. Es ist üblich, von einem Problem zu hören, die integrierte Diagnose der Anwendung zu überprüfen (die Webkonsole zu öffnen oder ein Diagnosetool wie JMX zu verwenden) und dann das zu überprüfen Protokolldateien.

Wenn Sie ein Nicht-Text-Format verwenden, stehen Sie sofort vor einer Hürde: Wie lesen Sie die Binärprotokolle? Mit dem Tool zum Lesen von Protokollen, das sich nicht auf Ihren Produktionsservern befindet! Oder es ist, aber oh je, wir haben ein neues Feld hinzugefügt und dies ist der alte Leser. Haben wir das nicht getestet? Ja, aber niemand hat es hier eingesetzt. In der Zwischenzeit beginnt Ihr Bildschirm zu leuchten, und Benutzer rufen Sie an.

Oder ist das vielleicht nicht deine App, aber du machst Support und glaubst zu wissen, dass es sich um dieses andere System und WTF handelt? Die Protokolle sind in einem binären Format? Ok, fang an Wiki-Seiten zu lesen und wo fängst du an? Jetzt habe ich sie auf meinen lokalen Computer kopiert, aber - sind sie beschädigt? Habe ich eine nicht-binäre Übertragung durchgeführt? Oder ist das Tool zum Lesen von Protokollen durcheinander?

Kurz gesagt, Textlesetools sind plattformübergreifend und allgegenwärtig, und Protokolle sind oft langlebig und müssen manchmal in Eile gelesen werden . Wenn Sie ein Binärformat erfinden, sind Sie von einer ganzen Welt gut verständlicher und benutzerfreundlicher Werkzeuge abgeschnitten. Schwerwiegender Funktionsverlust genau dann, wenn Sie ihn benötigen.

Die meisten Protokollierungsumgebungen machen einen Kompromiss: Halten Sie die aktuellen Protokolle lesbar und aktuell und komprimieren Sie die älteren. Das heißt, Sie profitieren von der Komprimierung - vor allem, weil ein Binärformat die Protokollnachrichten nicht verkleinert. Gleichzeitig können Sie weniger und grep und so weiter verwenden.

Welchen möglichen Nutzen könnte die Verwendung von Binärdateien bringen? Geringe Raumeffizienz - immer unwichtiger. Weniger (oder kleiner) schreibt? Nun, vielleicht - tatsächlich wird sich die Anzahl der Schreibvorgänge auf die Anzahl der Festschreibungen auf der Festplatte beziehen. Wenn also die Protokollzeilen erheblich kleiner als die Blockgröße der Festplatte sind, würde eine SSD ohnehin immer wieder neue Blöcke zuweisen. Binär ist also eine geeignete Wahl, wenn:

  • Sie schreiben große Mengen strukturierter Daten
  • Die Protokolle müssen besonders schnell erstellt werden
  • Es ist unwahrscheinlich, dass Sie sie unter "Support-Bedingungen" analysieren müssen.

Dies klingt jedoch weniger nach Anwendungsprotokollierung. Dies sind Ausgabedateien oder Aktivitätsdatensätze. Das Einfügen in eine Datei ist wahrscheinlich nur einen Schritt vom Schreiben in eine Datenbank entfernt.

BEARBEITEN

Ich denke, hier gibt es eine allgemeine Verwechslung zwischen "Programmprotokollen" (gemäß Protokollierungsrahmen) und "Datensätzen" (wie in Zugriffsprotokollen, Anmeldungsdatensätzen usw.). Ich vermute, die Frage hängt am engsten mit letzterer zusammen, und in diesem Fall ist die Frage weit weniger genau definiert. Es ist durchaus akzeptabel, dass ein Nachrichtendatensatz oder ein Aktivitätsprotokoll in einem kompakten Format vorliegt, zumal es wahrscheinlich genau definiert ist und eher zur Analyse als zur Fehlerbehebung verwendet wird. Dazu gehören Tools tcpdumpund der Unix-Systemmonitor sar. Programmprotokolle sind dagegen eher ad hoc.


1
Sogar Unix /var/log/utmp/ wtmp sind binär . Sie zeichnen auf, wer gerade an welchem ​​Tag angemeldet ist (damit sie nicht nur wachsen), sondern sind eine Form der Protokollierung. (Und es ist nützlich, sie billig analysieren zu können, da verschiedene gebräuchliche Befehle whogenau das tun.)
Peter Cordes

1
@ PeterCordes Sehr wahr. Wieder wohldefinierte Daten. strukturierte Aufzeichnungen. Und natürlich waren Geschwindigkeit und Größe in allen Maßstäben in jenen Tagen entscheidende Überlegungen.
SusanW

9

Ein Beispiel für ein etwas binäres Protokoll ist weit verbreitet: das Windows-Ereignisprotokoll. Auf der Pro-Seite ermöglicht dies, dass Protokollnachrichten praktisch kostenlos sehr wortreich (und damit hoffentlich hilfreich) sind, möglicherweise so etwas wie

Warnung: Die Warteschlange der zu erledigenden Aufgaben ist in den letzten 90 Sekunden um 517 Elemente gewachsen. Wenn dies ungefähr einmal pro Tag passiert, gibt es keinen Grund zur Sorge. Wenn dies öfter oder in schneller Folge geschieht, möchten Sie möglicherweise die für die foobar-Anwendung verfügbare RAM-Größe überprüfen. Wenn dies jedoch zusammen mit dem Ereignis 12345 auftritt, verwenden Sie anscheinend eine veraltete Datenbank. Rufen Sie besser den Support unter + 1-555-12345 an, um Datenverlust zu vermeiden.

Der Hauptteil dieser Nachricht ist nur einmal als Ressource vorhanden, die mit der Anwendung installiert wird. Wenn diese Ressource jedoch nicht ordnungsgemäß installiert ist (z. B. weil in der Zwischenzeit eine neuere Version installiert wurde, die diese veraltete Meldung nicht mehr unterstützt), wird im Ereignisprotokoll nur eine Standardmeldung angezeigt, für die nur ein ausgefallener Wortlaut angezeigt wird

Keine Ahnung, irgendwas mit "517" und "90".

und in keiner Weise mehr hilfreich.


9
Ganz zu schweigen davon, dass es ein Albtraum sein kann , etwas im Windows-Ereignisprotokoll zu finden. Ich sehne mich auf jeden Fall nach einer einfachen Textdatei.
Michael Hampton

4
Warten. Wollten Sie zwei (oder mehr) Protokolleinträge gleichzeitig sehen? Naja, schade.
Eric Towers

2
Meine Antwort würde lauten: "Windows-Ereignisprotokolle, genug gesagt."
Craig

Meine Erfahrung von fehlenden Ressourcen für die Ereignisanzeige ist mit Werkzeugen gewesen, die nicht haben , installieren Sie Ressourcen, aber in diesem Fall AFAIR, gibt es noch eine Reihe von aktuellen Informationen aus dem Berichtsprogramm, am Boden, nachdem Windows seine beendet " die ressource könnte fehlen oder beschädigt sein "spiel.
underscore_d

5

Die beiden wichtigsten Fragen, die Sie vor der Auswahl zwischen Text und Binär stellen sollten, sind:

  • Wer ist mein Publikum?
  • Welche Inhalte muss ich vermitteln?

Eine verbreitete Meinung ist, dass das Publikum einer Protokollnachricht ein Mensch ist. Dies ist offensichtlich keine perfekte Annahme, da es dort viele Crawlerskripte gibt, die jedoch häufig vorkommen. In diesem Fall ist es sinnvoll, die Informationen in einem Medium zu vermitteln, mit dem der Mensch vertraut ist. Text hat eine lange Tradition als Medium.

Wie für den Inhalt, die Ansicht , dass ein binäres Protokoll muss ein gut definiertes Format hat. Das Format muss so gut definiert sein, dass andere Benutzer Software schreiben können, die mit diesen Protokollen arbeitet. Einige Protokolle sind recht gut strukturiert (Ihre Frage enthält mehrere). Andere Protokolle müssen in der Lage sein, Inhalte in einer weniger genau definierten natürlichen Sprachform zu übermitteln. Solche Fälle in natürlicher Sprache passen schlecht zu Binärformaten.

Für die Protokolle, die in Binärdateien beschrieben werden könnten, müssen Sie eine Auswahl treffen. Da Text für alle Benutzer geeignet ist, wird er häufig als Standardeinstellung angesehen. Wenn Sie Ihre Ergebnisse in Textform protokollieren, können Benutzer mit Ihren Protokollen arbeiten. Es wurde tausendfach bewiesen. Binärdateien sind schwieriger. Infolgedessen kann es sein, dass Entwickler Text einfach ausgeben, weil jeder weiß, wie sich das verhalten wird.


5

TL; DR: Die Größe spielt keine Rolle, die Benutzerfreundlichkeit jedoch

Zunächst einmal ist der Vergleich der jeweiligen Vorteile von Text- und Binärformaten für die Kurzzeitspeicherung von Protokollen eine wichtige Frage, die Größe spielt jedoch keine Rolle. Die zwei Gründe dafür sind:

  1. Protokolle sind hochredundante Informationen, die sich sehr gut komprimieren lassen. Nach meiner Erfahrung werden komprimierte Protokolldateien nicht selten angezeigt, deren Größe 5% oder weniger der Größe der Originaldatei entspricht. Folglich sollte die Verwendung eines Text- oder Binärformats keinen messbaren Einfluss auf die Langzeitspeicherung von Protokollen haben.

  2. Unabhängig vom gewählten Format füllen Protokolle eine Serverfestplatte schnell, wenn keine „Protokolldateisenke“ implementiert wird, die Protokolldateien komprimiert und an eine Langzeitspeicherplattform sendet. Die Verwendung eines Binärformats könnte dies etwas verlangsamen, aber selbst eine Änderung um den Faktor 10 wäre nicht so wichtig.

Text im Vergleich zu binären Protokollformaten

Das Versprechen von Unix-Systemen ist, dass wir, wenn wir lernen, das Standard-Toolset für zeilenweise strukturierte Textdateien wie grep , sort , join , sed und awk zu verwenden, in der Lage sind, Prototypen für jede Aufgabe schnell zusammenzusetzen wir wollen, wenn auch langsam und grob. Sobald der Prototyp seine Nützlichkeit bewiesen hat, können wir ihn in eine wirklich ausgereifte Software verwandeln, um Leistung zu erzielen oder andere nützliche Funktionen hinzuzufügen. Dies ist zumindest nach meinem Verständnis die Essenz der Unix-Philosophie.

Anders ausgedrückt, wenn wir wahrscheinlich Behandlungen und Analysen durchführen müssen, die wir bis heute nicht herausfinden können, wenn wir nicht wissen, wer diese Analyse usw. implementieren soll, befinden wir uns in der Phase, in der Prototypen und Textformate verwendet werden sollten Protokolle sind wahrscheinlich optimal. Wenn wir wiederholt eine kleine Menge gut identifizierter Behandlungen durchführen müssen, sind wir in der Lage, ein mehrjähriges Softwaresystem für diese Analyse zu entwickeln, und es ist wahrscheinlich, dass binäre oder strukturierte Formate für Protokolle, wie relationale Datenbanken, vorhanden sind optimal.

(Vor einiger Zeit schrieb ich einen Blog-Beitrag darüber.)


4

Protokolldateien liegen im Textformat vor, da sie mit einem beliebigen Texteditor oder durch Anzeigen des Inhalts über den Konsolenbefehl problemlos gelesen werden können.

Einige Protokolldateien sind jedoch im Binärformat , wenn viele Daten vorhanden sind. Das Produkt, an dem ich arbeite, speichert beispielsweise maximal 15000 Datensätze. Um die Datensätze auf kleinstem Raum zu speichern, werden sie binär gespeichert. Es muss jedoch eine spezielle Anwendung geschrieben werden, um die Datensätze anzuzeigen oder in ein Format zu konvertieren, das verwendet werden kann (z. B. Tabellenkalkulationen).

Zusammenfassend sind nicht alle Protokolldateien im Textformat. Das Textformat hat den Vorteil, dass zum Anzeigen des Inhalts keine benutzerdefinierten Tools erforderlich sind. Bei vielen Daten kann die Datei im Binärformat vorliegen. Für das Binärformat ist eine (benutzerdefinierte) Anwendung erforderlich, um die Daten zu lesen und in einem für Menschen lesbaren Format anzuzeigen. Weitere Daten können in ein Binärformat gepackt werden. Ob das Textformat oder das Binärformat verwendet wird, hängt von der Datenmenge und der einfachen Anzeige des Inhalts ab.


3

In eingebetteten Systemen, in denen zur Laufzeit möglicherweise kein Ausgabekanal verfügbar ist, kann sich die Anwendung die Geschwindigkeitsbeschränkung durch die Protokollierung nicht leisten, da die Protokollierung den Effekt, den ich aufzeichnen möchte, häufig verändert oder maskiert Es wurde darauf zurückgegriffen, Binärdaten in ein Array oder einen Ringpuffer zu stopfen und sie entweder am Ende des Testlaufs auszudrucken oder als Raw-Datei auszugeben und einen Interpreter zu schreiben, um sie als lesbar auszudrucken. In jedem Fall möchte ich lesbare Daten erhalten.

Warum sollten Sie in Systemen mit mehr Ressourcen Schemata erfinden, um das zu optimieren, was nicht optimiert werden muss?


1
Wenn Sie versuchen, sich in Echtzeit von einem eingebetteten Gerät über einen seriellen 9.600-Baud-Port an einem PC anzumelden, ist es häufig ratsam, Daten zu komprimieren oder ein Binärformat zu verwenden, um Überläufe zu vermeiden.
Mawg

3

Protokolldateien sollen das Debuggen von Problemen unterstützen. In der Regel ist der Festplattenspeicher viel billiger als die Entwicklungszeit. Protokolldateien verwenden Text, da es viele Tools zum Arbeiten mit Text gibt (z. B. tail -f). Sogar HTTP verwendet Klartext (siehe auch, warum wir keine Binärdateien anstelle von Text auf http senden ).

Darüber hinaus ist es billiger, ein Klartext-Protokollierungssystem zu entwickeln und zu überprüfen, ob es funktioniert, leichter zu debuggen, wenn ein Fehler auftritt, und nützliche Informationen für den Fall wiederherzustellen, dass das System ausfällt und einen Teil des Protokolls beschädigt.


2
Da es von jemand anderem entwickelt wurde, wollte ich darauf hinweisen, dass HTTP / 2 (Achtung!) Binäre, bidirektionale Multiplex-Kommunikation ermöglicht. Entwickler, die sich Elite wünschen, sollten es schnell lernen und sich fragen, warum es nicht früher passiert ist.
Shaun Wilson

3

Eine beschädigte Textdatei kann immer noch um den beschädigten Teil gelesen werden. Eine beschädigte Binärdatei kann möglicherweise wiederhergestellt werden, möglicherweise jedoch auch nicht. Selbst wenn es wiederherstellbar ist, würde es einiges mehr Arbeit erfordern. Der andere Grund ist, dass ein binäres Protokollierungsformat es weniger wahrscheinlich macht, dass während eines Ansturms zum Erstellen einer "temporären Korrektur" (auch als "die dauerhafteste aller Korrekturen" bezeichnet) die Protokollierungslösung anstelle von etwas verwendet wird, das schneller erstellt werden kann.


2

Wir zählen auf Unit-Tests, um die Robustheit unserer Software zu erreichen und aufrechtzuerhalten. (Der Großteil unseres Codes wird auf einem Server ohne Kopf ausgeführt. Die Analyse von Protokolldateien nach dem Betrieb ist eine wichtige Strategie.) Nahezu jede Klasse in unserer Implementierung führt eine Protokollierung durch. Ein wichtiger Teil unserer Unit-Tests ist die Verwendung von "Mock" -Loggern, die bei Unit-Tests verwendet werden. Ein Komponententest erstellt einen Scheinlogger und stellt ihn dem zu testenden Objekt zur Verfügung. Es analysiert dann (wenn sinnvoll / angebracht), was protokolliert wurde (insbesondere Fehler und Warnungen). Die Verwendung eines textbasierten Protokollformats erleichtert dies aus den gleichen Gründen wie Analysen von "echten" Protokollen erheblich: Es stehen Ihnen weitere Tools zur Verfügung, die schnell verwendet und angepasst werden können.


2
Auch wenn jemand anderes eine Ablehnung vorgenommen hat, möchte ich darauf hinweisen, dass diese Art der Antwort immer noch einen Wert hat. Sie zeigt, dass textbasierte Protokolle selbst auf den schlechtesten Ebenen der Praxis nützlich sein können, wie es einem durchschnittlichen Programmierer eigentlich egal ist, aber sollte. +1
Shaun Wilson

Danke für den Support-Kommentar. Ich versuche, Informationen bereitzustellen, von denen ich denke, dass sie zumindest einigen Menschen nützlich sein werden. Es ist das, was ich will und erwarte, wenn ich zu SO gehe.
Art Swri

2

Historisch gesehen waren Protokolle offizielle, handgeschriebene und fortlaufende Aufzeichnungen von Ereignissen. Als Maschinen in der Lage waren, Ereignisse aufzuzeichnen, wurden diese auf ein gedrucktes Ausgabegerät wie einen Fernschreiber geschrieben, der eine permanente sequenzielle Aufzeichnung erzeugte, aber nur Text verarbeiten und gelegentlich eine GLOCKE läuten konnte ...


2

In meinen Mainframe-Tagen verwendeten wir ein benutzerdefiniertes binäres Protokollformat. Der Hauptgrund war nicht, Platz zu sparen, sondern weil wir wollten, dass das Protokoll einen begrenzten Platz einnimmt, indem alte Einträge durch neue überschrieben werden. Das letzte, was wir wollten, war, Probleme zu diagnostizieren, die durch die Auslastung der Festplatten verursacht wurden (1980 kostete der Festplattenspeicher 1000 USD / MB, sodass die Leute nicht mehr kauften, als sie brauchten).

Jetzt gefällt mir immer noch die Idee einer kreisförmigen Protokolldatei, und wenn Betriebssysteme solch ein Biest anbieten, würde ich sie ohne zu zögern verwenden. Aber binär war eine schlechte Idee. Sie möchten wirklich keine Zeit damit verschwenden, die richtigen Befehle zum Entschlüsseln einer Protokolldatei zu finden, wenn Sie ein kritisches Problem zu lösen haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.