GNU/Linux >> LINUX-Kenntnisse >  >> Linux

eine Logdatei erstellen

Der Standardweg zum Loggen aus einem C-Programm ist syslog .

Beginnen Sie mit dem Einbinden der Header-Datei:

#include <syslog.h>

Dann sollten Sie früh in Ihrem Programm Syslog konfigurieren, indem Sie openlog aufrufen :

openlog("programname", 0, LOG_USER);

Das erste Argument ist die Identifikation oder das Tag, das automatisch am Anfang jeder Nachricht hinzugefügt wird. Geben 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 befindet sich in man 3 syslog . Eines, das Sie vielleicht nützlich finden, ist LOG_PID , wodurch Syslog auch die Prozess-ID in der Protokollnachricht aufzeichnet.

Dann rufen Sie jedes Mal, wenn Sie eine Protokollnachricht schreiben möchten, syslog auf :

syslog(LOG_INFO, "%s", "Message");

Das erste Argument ist die Priorität. Die Priorität reicht von DEBUG (am unwichtigsten) bis EMERG (nur für Notfälle) mit DEBUG , INFO , und ERR am häufigsten verwendet werden. Siehe man 3 syslog für Ihre Optionen.

Das zweite und dritte Argument sind ein Format und eine Nachricht, genau wie printf.

In welcher Protokolldatei dies erscheint, hängt von Ihren Syslog-Einstellungen ab.

Bei einer Standardeinstellung geht es wahrscheinlich in /var/log/messages .

Sie können eine benutzerdefinierte Protokolldatei einrichten, indem Sie eine der Einrichtungen im Bereich LOG_LOCAL0 verwenden bis LOG_LOCAL7 .

Sie verwenden sie, indem Sie Folgendes ändern:

openlog("programname", 0, LOG_USER);

zu

openlog("programname", 0, LOG_LOCAL0);

oder

openlog("programname", 0, LOG_LOCAL1);

usw.

und Hinzufügen eines entsprechenden Eintrags zu /etc/syslog.conf , z. B.

local1.info /var/log/programname.log

und Neustart des Syslog-Servers, z. B.

pkill -HUP syslogd

Die .info Teil von local1.info oben bedeutet, dass alle Nachrichten INFO sind oder wichtiger werden protokolliert, einschließlich INFO , NOTICE , ERR (Fehler), CRIT (kritisch) usw., aber nicht DEBUG .

Oder, wenn Sie rsyslog haben , könnten Sie einen eigenschaftsbasierten Filter ausprobieren, z. B.

:syslogtag, isequal, "programname:"    /var/log/programname.log

Der Syslogtag sollte ein ":" enthalten.

Oder wenn Sie vorhaben, Ihre Software an andere Personen zu verteilen, ist es wahrscheinlich keine gute Idee, sich auf die Verwendung von LOG_LOCAL zu verlassen oder ein rsyslog filtern.

In diesem Fall sollten Sie LOG_USER verwenden (wenn es sich um ein normales Programm handelt) oder LOG_DAEMON (wenn es sich um einen Server handelt), schreiben Sie Ihre Startmeldungen und Fehlermeldungen mit syslog , aber schreiben Sie alle Ihre Protokollmeldungen in eine Datei außerhalb von syslog . Apache HTTPd meldet sich beispielsweise bei /var/log/apache2/* an oder /var/log/httpd/* , nehme ich an, dass Sie den regulären open verwenden /fopen und write /printf Anrufe.


Sie werden #include <syslog.h> wollen , dann verwenden Sie den syslog() Funktionen, um Daten an das jeweils aktive Protokollierungsprogramm des Systems zu senden.

Sehen Sie sich die Manpage hier an.


Linux
  1. Linux – Wie konfiguriere ich die Syslog.conf-Datei, um Iptables-Meldungen in einer separaten Datei zu protokollieren?

  2. So leeren Sie eine Protokolldatei unter Linux

  3. Linux-Betriebssystemdienst „syslog“

  4. Wie mache ich eine Datei NICHT änderbar?

  5. cp-L vs. cp-H

Wie man eine Datei unter Linux ausführbar macht

Logrotate unter Linux einrichten

Protokolldateirotation

Linux-make-Befehl mit Beispielen

Wie kann man ssh dazu bringen, sich als der richtige Benutzer anzumelden?

Protokollrotation von stdout?