void
syslog(
int priority
, const char *message
, ...
)
void
syslog_r(
int priority
, struct syslog_data *data
, const char *message
, ...
)
void
openlog(
const char *ident
, int logopt
, int facility
)
void
openlog_r(
const char *ident
, int logopt
, int facility
, struct syslog_data *data
)
void
closelog(
void
)
void
closelog_r(
struct syslog_data *data
)
int
setlogmask(
int maskpri
)
int
setlogmask_r(
int maskpri
, struct syslog_data *data
)
void
vsyslog(
int priority
, const char *message
, va_list args
)
void
vsyslog_r(
int priority
, struct syslog_data *data
, const char *message
, va_list args
)
struct syslog_data {
int log_file;
int connected;
int opened;
int log_stat;
const char *log_tag;
int log_fac;
int log_mask;
};
#define SYSLOG_DATA_INIT { \
.log_file = -1, \
.log_fac = LOG_USER, \
.log_mask = 0xff, \
}
)
function
writes
message
to the system message logger.
The message is then written to the system console, log files,
logged-in users, or forwarded to other machines as appropriate (See
syslogd(8)).
The message is identical to a
printf(3)
format string, except that
`%m'
is replaced by the current error
message.
(As denoted by the global variable
errno;
see
strerror(3).)
A trailing newline is added if none is present.
The
syslog_r()
function is a multithread-safe version of the
syslog(
)
function.
It takes a pointer to a
syslog_data
structure which is used to store
information.
This parameter must be initialized before
syslog_r()
is called.
The
SYSLOG_DATA_INIT
constant is used for this purpose.
The
syslog_data
structure is composed of the following elements:
log_file
connected
opened
)
has been called
log_stat
)
log_tag
log_fac
log_mask
The
vsyslog()
function
is an alternative form in which the arguments have already been captured
using the variable-length argument facilities of
varargs(3).
The message is tagged with
priority
.
Priorities are encoded as a
facility
and a
level.
The facility describes the part of the system
generating the message.
The level is selected from the following
ordered
(high to low) list:
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
The
vsyslog_r()
is used the same way as
vsyslog(
)
except that it takes an additional pointer to a
syslog_data
structure.
It is a multithread-safe version of the
vsyslog()
function described above.
The
openlog()
function
provides for more specialized processing of the messages sent
by
syslog(
)
and
vsyslog(
).
The parameter
ident
is a string that will be prepended to every message.
The
logopt
argument
is a bit field specifying logging options, which is formed by
OR'ing
one or more of the following values:
LOG_CONS
)
cannot pass the message to
syslogd(8)
it will attempt to write the message to the console
(``
/dev/console
'').
LOG_NDELAY
LOG_PERROR
LOG_PID
The
facility
parameter encodes a default facility to be assigned to all messages
that do not have an explicit facility encoded:
LOG_AUTH
LOG_AUTHPRIV
LOG_AUTH
,
but logged to a file readable only by
selected individuals.
LOG_CRON
LOG_DAEMON
LOG_FTP
LOG_KERN
LOG_LPR
LOG_MAIL
LOG_NEWS
LOG_SYSLOG
LOG_USER
LOG_UUCP
LOG_LOCAL0
LOG_LOCAL1
through
LOG_LOCAL7
.
The
openlog_r()
function is the multithread-safe version of the
openlog(
)
function.
It takes an additional pointer to a
syslog_data
structure.
This function must be used in conjunction with the other
multithread-safe functions.
The
closelog()
function
can be used to close the log file.
The
closelog_r()
does the same thing as
closelog(3)
but in a multithread-safe way and takes an additional
pointer to a
syslog_data
structure.
The
setlogmask()
function
sets the log priority mask to
maskpri
and returns the previous mask.
Calls to
syslog()
with a priority not set in
maskpri
are rejected.
The mask for an individual priority
pri
is calculated by the macro
LOG_MASK(pri
);
the mask for all priorities up to and including
toppri
is given by the macro
LOG_UPTO(toppri
).
The default allows all priorities to be logged.
The
setlogmask_r()
function is the multithread-safe version of
setlogmask(
).
It takes an additional pointer to a
syslog_data
structure.
),
closelog_r(
),
openlog(
),
openlog_r(
),
syslog(
),
syslog_r(
),
vsyslog(
),
and
vsyslog_r(
)
return no value.
The routines
setlogmask()
and
setlogmask_r(
)
always return the previous log mask level.
syslog(LOG_ALERT, "who: internal error 23");
openlog("ftpd", LOG_PID | LOG_NDELAY, LOG_FTP);
setlogmask(LOG_UPTO(LOG_ERR));
syslog(LOG_INFO, "Connection from host %d", CallingHost);
syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
For the multithread-safe functions:
struct syslog_data sdata = SYSLOG_DATA_INIT;
syslog_r(LOG_INFO|LOG_LOCAL2, &sdata, "foobar error: %m");
),
as the resulting string may still contain user-supplied conversion specifiers
for later interpolation by
syslog(
).
Always be sure to use the proper secure idiom:
syslog(priority, "%s", string);