closelog, openlog, syslog, vsyslog - verschickt Nachrichten an die
Systemprotokollierung
Standard-C-Bibliothek (
libc,
-lc)
#include <syslog.h>
void openlog(const char *ident, int option, int einrichtung);
void syslog(int priorität, const char *format, …);
void closelog(void);
void vsyslog(int priorität, const char *format, va_list ap);
vsyslog():
Seit Glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 und älter:
_BSD_SOURCE
openlog() öffnet für ein Programm eine Verbindung zum
Syslog-Daemon.
Die Zeichenkette
ident wird jeder Nachricht vorangestellt und wird
üblicherweise auf den Programmnamen gesetzt. Falls
ident gleich
NULL ist, wird der Programmname benutzt. (POSIX.1-2008 enthält keine
Spezifikation für den Fall, dass
ident gleich NULL ist)
Der
option-Parameter definiert Schalter, welche die Ausführung von
Openlog und darauffolgende Aufrufe von
syslog() steuern. Der
einrichtung-Parameter definiert einen Standardwert, welcher benutzt
wird, falls in darauffolgenden
syslog()-Aufrufen nichts spezifiziert
wurde. Die Werte, die für
option und
einrichtung
angegeben werden dürfen, werden weiter unten beschrieben.
Die Benutzung von
openlog() ist optional; gegebenenfalls wird die Routine
automatisch von
syslog() aufgerufen, wenn es nötig ist, dann
wird
ident auf NULL gesetzt.
syslog() erzeugt eine Protokoll-Nachricht, die vom
syslogd(8)
verteilt wird.
Der Parameter
priorität ist das Ergebnis einer
ODER-Verknüpfung eines Werts
einrichtung und eines Werts
level (weiter unten beschrieben). Falls kein Wert
einrichtung
mit
priorität ODER-verknüpft wird, dann wird der durch
openlog() gesetzte Vorgabewert verwandt, oder, falls es keinen
vorhergehenden Aufruf
openlog() gab, die Vorgabe
LOG_USER
verwandt.
Die verbleibenden Parameter sind
format, wie bei
printf(3) und
weitere Parameter, die von
format benötigt werden. Allerdings
wird die Zwei-Zeichen-Folge %m durch die Fehlermeldung
strerror(
errno) ersetzt werden. Die Formatzeichenkette muss kein
abschließendes Zeilenumbruchzeichen enthalten.
Die Funktion
vsyslog() führt die gleiche Aufgabe aus wie
syslog(), mit dem Unterschied, dass sie eine Liste an Parametern
erhält, die mit Makros aus der
stdarg(3)-Variablenliste
abgefragt werden.
closelog() schließt den Dateideskriptor, der zum Schreiben der
Protokoll-Nachrichten benutzt wurde. Die Benutzung von
closelog() ist
optional.
Der Parameter
option von
openlog() ist eine Bitmaske, die durch
ODER-Verknüpfung beliebiger der folgenden Werte erstellt wird:
- LOG_CONS
- schreibt direkt auf die Systemkonsole, falls ein Fehler
beim Schreiben an die Systemprotokollierung auftritt.
- LOG_NDELAY
- öffnet die Verbindung sofort (normalerweise wird die
Verbindung geöffnet, wenn die erste Nachricht protokolliert wird).
Dies kann zum Beispiel nützlich sein, falls durch ein nachfolgendes
chroot(2) die intern von der Protokollierungseinrichtung verwandten
Pfadnamen unerreichbar werden würden.
- LOG_NOWAIT
- wartet nicht auf Kindprozesse, welche eventuell beim
Protokollieren der Nachricht erzeugt wurden. (Die GNU-C-Bibliothek erzeugt
keine Kindprozesse, insofern hat diese Option keine Auswirkung unter
Linux.)
- LOG_ODELAY
- das Gegenteil von LOG_NDELAY; das Öffnen der
Verbindung wird bis zum Aufruf von syslog() verzögert. (Das
ist das Standardverhalten und muss nicht angegeben werden.)
- LOG_PERROR
- (nicht in POSIX.1-2001 oder POSIX.1-2008) die Nachricht
auch nach stderr protokollieren.
- LOG_PID
- füge die PID des Aufrufenden in jede Nachricht
ein.
Der Parameter
einrichtung wird benutzt, um anzugeben, welcher Programmtyp
die Nachricht protokolliert. Dadurch kann mit der Konfigurationsdatei
syslog.conf erreicht werden, dass Nachrichten von unterschiedlichen
Einrichtungen auch unterschiedlich behandelt werden.
- LOG_AUTH
- Sicherheits-/Autorisations-Nachrichten
- LOG_AUTHPRIV
- Sicherheits-/Autorisations-Nachrichten (privat)
- LOG_CRON
- Uhr-Daemon (cron und at)
- LOG_DAEMON
- System-Daemonen ohne spezielle Einrichtungswerte
- LOG_FTP
- FTP-Daemon
- LOG_KERN
- Kernel-Nachrichten (diese können nicht von
Benutzerprozessen erzeugt werden)
-
LOG_LOCAL0 bis LOG_LOCAL7
- reserviert für den lokalen Gebrauch
- LOG_LPR
- Zeilendrucker-Untersystem
- LOG_MAIL
- Mail-Subsystem
- LOG_NEWS
- Usenet Nachrichten-Untersystem
- LOG_SYSLOG
- Nachrichten, die intern vom syslogd(8) erzeugt
wurden
-
LOG_USER (Standardwert)
- generische Nachrichten auf Anwenderebene
- LOG_UUCP
- UUCP-Subsystem
Dieser Parameter gibt die Dringlichkeitsstufe der Nachricht an. Die Stufen sind
in absteigender Wichtigkeit:
- LOG_EMERG
- Das System ist unbrauchbar.
- LOG_ALERT
- Es muss sofort gehandelt werden.
- LOG_CRIT
- kritische Bedingungen
- LOG_ERR
- Fehlerbedingungen
- LOG_WARNING
- Warnungsbedingungen
- LOG_NOTICE
- normale, aber bedeutende Bedingung
- LOG_INFO
- Information
- LOG_DEBUG
- Debuginformation
Die Funktion
setlogmask(3) kann dazu benutzt werden, um das
Protokollieren auf bestimmte Level einzuschränken.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
openlog(), closelog() |
Multithread-Fähigkeit |
MT-Safe |
syslog(), vsyslog() |
Multithread-Fähigkeit |
MT-Safe env locale |
Die Funktionen
openlog(),
closelog() und
syslog() (aber
nicht
vsyslog()) sind in SUSv2, POSIX.1-2001, and POSIX.1-2008
spezifiert.
POSIX.1-2001 spezifiert nur die Werte
LOG_USER und
LOG_LOCAL*
für
einrichtung. Auf den meisten UNIX-Systemen gibt es jedoch
auch die anderen
einrichtung-Optionen mit der Ausnahme von
LOG_AUTHPRIV und
LOG_FTP.
Der Wert
LOG_PERROR für den Parameter
option ist in
POSIX.1-2001 oder POSIX.1-2008 nicht spezifiert, aber auf den meisten
UNIX-Versionen verfügbar.
Das Argument
ident im Aufruf von
openlog() wird wahrscheinlich
unverändert gespeichert. Falls sich demnach die Zeichenkette, auf die
sich
ident bezieht, ändert, kann
syslog() die
geänderte Zeichenkette voranstellen. Falls die Zeichenkette nicht mehr
gefunden werden kann, ergibt dies ein undefiniertes Ergebnis. Die portabelste
Lösung ist die Verwendung einer konstanten Zeichenkette.
Übergeben Sie niemals eine Zeichenkette, die Daten von Benutzeriengaben
enthält, als Format, sondern benutzen Sie das Folgende:
syslog(priority, "%s", string);
journalctl(1),
logger(1),
setlogmask(3),
syslog.conf(5),
syslogd(8)
Die deutsche Übersetzung dieser Handbuchseite wurde von Gerd Koenig
<
[email protected]> und Mario Blättermann
<
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer