Control system log.
#include <syslog.h> #include <stdarg.h> void syslog(int priority, const char *message, ...); void vsyslog(int priority, const char *message, va_list args); void openlog(const char *ident, int logopt, int facility); void closelog(void); int setlogmask(int maskpri);
syslog
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.
The message is identical to a printf format string, except that '%m' is replaced by the current error message. (As denoted by the global variable errno,
; see strerror().) A trailing newline is added if none is present.
vsyslog
is an alternate form in which arguments are already captured using the variable-length argument facilities of stdarg
.
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 | A panic condition. This is normally broadcast to all users. |
LOG_ALERT | A condition that needs immediate correction, such as a corrupted system database. |
LOG_CRIT | Critical conditions, e.g., hard device errors. |
LOG_ERR | Errors. |
LOG_WARNING | Warning messages. |
LOG_NOTICE | Conditions that are not error conditions, but should possibly be handled specially. |
LOG_INFO | Informational messages. |
LOG_DEBUG | Messages that contain information normally of use only when debugging a program. |
openlog()
provides for more specialized processing of the messages sent by syslog
and vsyslog
. The ident
argument is a string prepended to every message. The logopt
argument is a bit field that specifies logging options, which is formed by OR'ing one or more of the following values:
LOG_CONS | If syslog cannot pass the message to the system logger it tries to write the message to the console. |
LOG_NDELAY | Immediately opens a connection to the system logger. |
LOG_PERROR | Writes the message to standard error output as well to the system log. |
LOG_PID | Logs the process ID with each message. Useful for identifying instantiations of daemons. |
The facility
argument encodes a default facility to be assigned to all messages that do not have an explicit facility encoded:
LOG_AUTH | The authorization system. |
LOG_AUTHPRIV | The same as LOG_AUTH, but logged to a file readable only by selected individuals. |
LOG_CONSOLE | Messages written to the console by the kernel console output driver. |
LOG_CRON | The cron daemon. |
LOG_DAEMON | System daemons that other facilities do not explicitly provide for. |
LOG_FTP | The file transfer protocol daemons. |
LOG_KERN | Messages generated by the kernel. User processes cannot generate these. |
LOG_LPR | The line printer spooling system. |
LOG_MAIL | The mail system. |
LOG_NEWS | The network news system. |
LOG_NTP | The network time protocol system |
LOG_SECURITY | Security subsystems, such as ipfw . |
LOG_SYSLOG | Messages internally generated by the system logger. |
LOG_USER | Messages generated by random user processes. If none is specified, this is the default facility identifier. |
LOG_UUCP | The uucp system. |
LOG_LOCAL0 | Reserved for local use. Similarly for LOG_LOCAL1 through LOG_LOCAL7. |
You can use closelog
to close the log file.
setlogmask
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.
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");
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_INFO, "%s", string);
closelog
, openlog
, syslog
and vsyslog
return no value.
setlogmask
always returns the previous log mask level.
Versions | Link to |
---|---|
INtime 4.2 | clib.lib |