closelog, openlog, syslog — send messages to the system logger
#include <syslog.h>
void
openlog( |
const char * | ident, |
| int | option, | |
| int | facility); |
void
syslog( |
int | priority, |
| const char * | format, | |
...); |
void
closelog( |
void); |
#define _BSD_SOURCE #include <stdarg.h>
void
vsyslog( |
int | priority, |
| const char * | format, | |
| va_list | ap); |
closelog() closes the
descriptor being used to write to the system logger. The use
of closelog() is optional.
openlog() opens a connection
to the system logger for a program. The string pointed to by
ident is prepended to
every message, and is typically set to the program name. The
option argument
specifies flags which control the operation of openlog() and subsequent calls to
syslog(). The facility argument establishes a
default to be used if none is specified in subsequent calls
to syslog(). Values for
option and facility are given below. The
use of openlog() is optional;
it will automatically be called by syslog() if necessary, in which case
ident will default to
NULL.
syslog() generates a log
message, which will be distributed by syslogd(8). The priority argument is formed by
ORing the facility
and the level
values (explained below). The remaining arguments are a
format, as in
printf(3) and any arguments
required by the format, except that the two
character sequence %m will be replaced by the error message
string strerror(errno). A trailing newline may be added if
needed.
The function vsyslog()
performs the same task as syslog() with the difference that it takes
a set of arguments which have been obtained using the
stdarg(3) variable argument
list macros.
The subsections below lists the parameters used to set the
values of option,
facility, and
priority.
The option
argument to openlog() is an
OR of any of these:
LOG_CONSWrite directly to system console if there is an error while sending to system logger.
LOG_NDELAYOpen the connection immediately (normally, the connection is opened when the first message is logged).
LOG_NOWAITDon't wait for child processes that may have been created while logging the message. (The GNU C library does not create a child process, so this option has no effect on Linux.)
LOG_ODELAYThe converse of LOG_NDELAY; opening of the
connection is delayed until syslog() is called. (This is the
default, and need not be specified.)
LOG_PERROR(Not in POSIX.1-2001.) Print to stderr as well.
LOG_PIDInclude PID with each message.
The facility
argument is used to specify what type of program is logging
the message. This lets the configuration file specify that
messages from different facilities will be handled
differently.
LOG_AUTHsecurity/authorization messages (DEPRECATED Use
LOG_AUTHPRIV
instead)
LOG_AUTHPRIVsecurity/authorization messages (private)
LOG_CRONclock daemon (cron and at)
LOG_DAEMONsystem daemons without separate facility value
LOG_FTPftp daemon
LOG_KERNkernel messages
LOG_LOCAL0 through LOG_LOCAL7reserved for local use
LOG_LPRline printer subsystem
LOG_MAILmail subsystem
LOG_NEWSUSENET news subsystem
LOG_SYSLOGmessages generated internally by syslogd(8)
LOG_USER (default)generic user-level messages
LOG_UUCPUUCP subsystem
This determines the importance of the message. The levels are, in order of decreasing importance:
LOG_EMERGsystem is unusable
LOG_ALERTaction must be taken immediately
LOG_CRITcritical conditions
LOG_ERRerror conditions
LOG_WARNINGwarning conditions
LOG_NOTICEnormal, but significant, condition
LOG_INFOinformational message
LOG_DEBUGdebug-level message
The function setlogmask(3) can be used to restrict logging to specified levels only.
The functions openlog(),
closelog(), and syslog() (but not vsyslog()) are specified in SUSv2 and
POSIX.1-2001. POSIX.1-2001 specifies only the LOG_USER and LOG_LOCAL* values for
facility. However,
with the exception of LOG_AUTHPRIV and LOG_FTP, the other facility values appear on most
Unix systems. The LOG_PERROR
value for option is
not specified by POSIX.1-2001, but is available in most
versions of Unix.
The parameter ident in the call of
openlog() is probably stored
as-is. Thus, if the string it points to is changed,
syslog() may start prepending
the changed string, and if the string it points to ceases to
exist, the results are undefined. Most portable is to use a
string constant.
Never pass a string with user-supplied data as a format, the following instead:
syslog(priority, "%s", string);
logger(1), setlogmask(3), syslog.conf(5), feature_test_macros(7), syslogd(8)
|
|