| SYSLOG(3) | Library Functions Manual | SYSLOG(3) |
closelog, openlog,
setlogmask, syslog,
vsyslog — control system
log
Standard C Library (libc, -lc)
#include
<syslog.h>
void
closelog(void);
void
openlog(const char *ident,
int logopt, int facility);
int
setlogmask(int maskpri);
void
syslog(int priority,
const char *message, ...);
#include
<syslog.h>
#include <stdarg.h>
void
vsyslog(int priority,
const char *message, va_list
args);
The
syslog()
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.
Newlines and other non-printable characters embedded in the message string are printed in an alternate format. This prevents someone from using non-printable characters to construct misleading log messages in an output file. Newlines are printed as "\n", tabs are printed as "\t". Other control characters are printed using a caret ("^") representation, for example "^M" for carriage return.
The
vsyslog()
function is an alternate form in which the arguments have already been
captured using the variable-length argument facilities of
stdarg(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_EMERGLOG_ALERTLOG_CRITLOG_ERRLOG_WARNINGLOG_NOTICELOG_INFOLOG_DEBUGThe
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_CONSsyslog() cannot pass the message to
syslogd(8) it will attempt to write the message to the
console (“/dev/console”).LOG_NDELAYLOG_PERRORLOG_PIDThe facility parameter encodes a default facility to be assigned to all messages that do not have an explicit facility encoded:
LOG_AUTHLOG_AUTHPRIVLOG_AUTH, but logged to a file
readable only by selected individuals.LOG_CRONLOG_DAEMONLOG_FTPLOG_KERNLOG_LPRLOG_MAILLOG_NEWSLOG_SECURITYLOG_SYSLOGLOG_USERLOG_UUCPLOG_LOCAL0LOG_LOCAL1
through LOG_LOCAL7.The
closelog()
function can be used to close the log file.
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 routines closelog(),
openlog(), syslog(), and
vsyslog() return no value.
The routine setlogmask() always returns
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");
#include
<syslog.h> #include
<stdarg.h>
These include files are necessary for all functions.
These functions appeared in 4.2BSD.
Never pass a string with user-supplied data as a format without
using ‘%s’. An attacker can put format
specifiers in the string to mangle your stack, leading to a possible
security hole. This holds true even if the string was built using a function
like snprintf(), as the resulting string may still
contain user-supplied conversion specifiers for later interpolation by
syslog().
Always use the proper secure idiom:
syslog(LOG_ERR, "%s", string);
| June 4, 1993 | Mac OS X 12 |