Gibt es eine Möglichkeit, eine Protokolldatei zum Verwalten einiger Daten in / var / log / mit Hilfe einer Bibliotheksfunktion oder eines Systemaufrufs in der Sprache c unter Linux zu erstellen? Und ich möchte auch die Standards kennen, die wir zum Schreiben und Verarbeiten von Protokollen befolgen sollten. Vielen Dank
22
Antworten:
Die Standardmethode zum Protokollieren aus einem C-Programm ist
syslog
.Beginnen Sie mit der Header-Datei:
Dann sollten Sie zu Beginn Ihres Programms syslog konfigurieren, indem Sie Folgendes aufrufen
openlog
:Das erste Argument ist die Identifikation oder das Tag, das am Anfang jeder Nachricht automatisch hinzugefügt wird. Tragen Sie hier den Namen Ihres Programms ein.
Das zweite Argument sind die Optionen, die Sie verwenden möchten, oder
0
für das normale Verhalten. Die vollständige Liste der Optionen finden Sie inman 3 syslog
. Eine nützliche Funktion istLOG_PID
, dass Syslog auch die Prozess-ID in der Protokollnachricht aufzeichnet.Jedes Mal, wenn Sie eine Protokollnachricht schreiben möchten, rufen Sie Folgendes auf
syslog
:Das erste Argument ist die Priorität. Die Priorität liegt im Bereich von
DEBUG
( am wenigsten wichtig) bisEMERG
(nur für Notfälle) mitDEBUG
,INFO
undERR
die am häufigsten verwendet wird. Sehen Sieman 3 syslog
für Ihre Optionen.Das zweite und dritte Argument sind ein Format und eine Nachricht, genau wie printf.
In welcher Protokolldatei dies angezeigt wird, hängt von Ihren Syslog-Einstellungen ab.
Bei einem Standard-Setup geht es wahrscheinlich in
/var/log/messages
.Sie können eine benutzerdefinierte Protokolldatei einrichten, indem Sie eine der Funktionen im Bereich
LOG_LOCAL0
bis verwendenLOG_LOCAL7
.Sie verwenden sie, indem Sie Folgendes ändern:
zu
oder
etc.
und Hinzufügen eines entsprechenden Eintrags zu
/etc/syslog.conf
zund Neustarten des Syslog-Servers, z
Der
.info
Teil vonlocal1.info
oben bedeutet , dass alle Nachrichten , die sindINFO
oder noch wichtiger werden protokolliert, einschließlichINFO
,NOTICE
,ERR
(Fehler),CRIT
(kritisch), etc., aber nichtDEBUG
.Oder wenn
rsyslog
ja, können Sie einen eigenschaftsbasierten Filter ausprobieren , zDer Syslogtag sollte ein ":" enthalten.
Wenn Sie vorhaben, Ihre Software an andere Personen zu verteilen, ist es wahrscheinlich keine gute Idee, sich auf die Verwendung
LOG_LOCAL
oder einenrsyslog
Filter zu verlassen.In diesem Fall sollten Sie
LOG_USER
(wenn es sich um ein normales Programm handelt) oderLOG_DAEMON
(wenn es sich um einen Server handelt) Ihre Startmeldungen und Fehlermeldungen mitsyslog
schreiben, aber alle Ihre Protokollmeldungen in eine Datei außerhalb von schreibensyslog
. Zum Beispiel meldet sich Apache HTTPd bei/var/log/apache2/*
oder/var/log/httpd/*
ich gehe davon aus, dass ich reguläreopen
/fopen
undwrite
/printf
-Aufrufe verwende.quelle
rpm -qa | grep syslog
oderdpkg -l '*syslog*'
wird dir wohl sagen was.sysklogd
es das einzige Spiel in der Stadt für Syslog-Software gab. Heutzutage Software wiesyslog-ng
,rsyslog
unddsyslog
exist und haben viel komplexere Filterfunktionen als nur Service / Niveau.Sie möchten
#include <syslog.h>
dann diesyslog()
Funktionen verwenden, um Daten an das aktive Systemprotokollierungsprogramm zu senden.Siehe die Manpage hier .
quelle
Es gibt viele Möglichkeiten, was ist Ihr Plan? Benötigen Sie nur eine Option, um sich über die Befehlszeile anzumelden? Schauen Sie sich an
logger
(in bsdutils enthalten ). Tipp einfach:und es wird so etwas in Ihrem protokollieren
/var/log/syslog
:siehe auch
man logger
. Abhängig von Ihrem Protokollierungs-Daemon können Sie diese Nachrichten nach bestimmten Dateien sortieren oder nach Priorität filtern.Es gibt auch einige Lösungen für verschiedene Programmiersprachen, also sag mir bitte, was du machen möchtest ;-)
quelle
Das Filtern nach Programmnamen unterscheidet sich von den oben genannten
rsyslog
Angaben für die neuesten Versionen von (Version auf meinem Computer ist 5.8.6) wie folgt:Weitere Informationen finden Sie hier
quelle