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 is added when 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 functions openlog(), closelog(), and syslog() (but not
vsyslog()) are specified in SUSv2 and POSIX 1003.1-2001. POSIX
1003.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
1003.1-2001, but is available in most versions of Unix.
A syslog function call appeared in BSD 4.2. BSD 4.3 documents
openlog(), syslog(), closelog(), and setlogmask().
4.3BSD-Reno also documents vsyslog(). Of course early v* functions used
the <varargs.h> mechanism, which is not compatible with
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, use