Antworten:
Es ist Teil der Unix-Philosophie . Die Idee ist, dass Textdateien frei von Programm-Lock-In sind und jeder die Technik verwenden kann, die er bevorzugt. Um dies weiter zu führen, werden häufig Flatfiles verwendet, im Gegensatz zu Markup-Sprachen wie XML (obwohl ich Programme gesehen habe, die Dinge auch im XML-Format speichern).
Beim Googeln habe ich diesen schönen Artikel über Klartext mit Kommentaren zur Unix-Philosophie gefunden.
Die Verwendung einfacher Textdateien hat den Vorteil, dass Sie keine datenbankspezifischen Tools benötigen, um Ihre Protokolleinträge abzurufen.
Sie können sie mit grep analysieren, wenn Sie möchten, Sie können sie mit Ihrem bevorzugten Pager öffnen und Sie können sie in Ihrer bevorzugten Skriptsprache wie Perl, Python usw. verarbeiten, ohne dass zusätzliche Bibliotheken erforderlich sind.
Auf einem Unix-System haben Sie bereits eine Art "Systemprotokoll-API". Es heißt Syslog. Syslog ist eigentlich keine API, aber ein Standard zum Protokollieren von Nachrichten. Der Name steht für das Netzwerkprotokoll und die dahinter stehende Bibliothek und den Daemon.
Die Standardkonfiguration der meisten Systeme ist ein Syslog-Daemon, der lokale Nachrichten abhört.
Der Dämon akzeptiert die Nachrichten und führt die Protokollierung durch. Es gibt verschiedene Implementierungen von Syslog-Daemons für alle Arten von Plattformen, und es ist auch möglich, Ihre Nachrichten in einer Datenbank zu protokollieren.
Es liegt an dir.
Ich frage mich nur, warum es in einem typischen Linux-System so viele Protokolldateien gibt.
Die verschiedenen Protokolldateien enthalten unterschiedliche Informationen (obwohl normalerweise einige Duplikate vorliegen). Sie weisen häufig unterschiedliche Merkmale auf: unterschiedliche Rotations- und Aufbewahrungsrichtlinien, unterschiedliche Berechtigungen usw. Der Syslog-Daemon kümmert sich um das Schreiben. Sie können die Einstellungen in /etc/syslog.conf
oder sehen /etc/syslog-ng.conf
.
Wäre es nicht eine bessere Idee, eine System-API-Funktion für die Protokollierung zu haben?
Dieser ist eine gute Idee. Nennen wir es Syslog . Seine Aufgabe ist es, die Protokolleinträge an den Syslog-Daemon zu senden.
und eine konsolidierte Tabelle, um alle Protokolleinträge aus allen Anwendungen zu speichern?
Das ist eine ganze Dose Würmer. Sie scheinen das Vorhandensein eines Datenbankmoduls anzunehmen, wahrscheinlich einer relationalen Datenbank, die Sie wahrscheinlich in SQL abfragen können. Unix ist jedoch älter als SQL, und es gibt sehr gute Gründe, warum SQL nicht als Standardkomponente übernommen wurde. Unter Unix ist die Datenbank das Dateisystem. Es ist keine relationale Datenbank, es ist eine einfache . Seine Einträge sind keine Zeilen, sondern einfache Dateien, vorzugsweise Text, vorzugsweise mit einem einfachen Format. Protokolldateien sind beispielsweise Textdateien mit einem Eintrag pro Zeile, der das Datum, den Computernamen, das Ursprungsprogramm und den Eintragstext enthält. Die Verwendung einer relationalen Datenbank hätte eine Reihe von Nachteilen:
cat
, grep
, less
gegen SQL - Abfragen. Und Dateiberechtigungen gegen, nun, ich weiß nicht, wie Sie damit in einer typischen relationalen Datenbank umgehen würden.Wenn Sie Ihre Systemprotokolle wirklich in einer relationalen Datenbank speichern möchten (was viele Vorteile haben kann), lesen Sie rsyslog ( Der aufstrebende Ersatz für syslog ), mit dem Systemprotokolle in eine MySQL- , Postgres- oder Oracle-Datenbank geschrieben werden können .
Dies würde Dinge wie 'tail -f /var/log/apache/access.log' unmöglich machen.
Warum ist es Ihrer Meinung nach besser, alles in einer Datei zu speichern?
grep '\[apache\]' | tail -f /dev/stdin
- aber Benutzer auf dem Server anmelden (wenn der Benutzer keinen Zugriff auf das Protokoll eines anderen Benutzers hat).
.log
und.conf
als Bezeichner zustimmen ?