Syslog Continued

This week I will present the rest of the functions declared

in "sys/syslog.h", namely openlog(), closelog(), and setlogmask():


Although syslog() is sufficient for basic message logging, for more

advanced uses you may need to call openlog() before syslog(). openlog()

sets process attributes that affect subsequent calls to syslog(). Here

is the prototype of this function:

void openlog(const char *str, int options, int facility);

The first argument is a string that is prepended to every message. The

second argument describes various logging options that are indicated by

combining zero or more of the following constants using the bitwise OR



Log the process ID with each message. This is useful for distinguishing

between daemon processes that have forked.


Direct messages to the system console if they cannot be sent to



Open the connection to syslogd immediately, without waiting for the

first message to be logged.


Delay open until the first call to syslog().


Do not wait for child processes that have been forked to log messages

onto the console.

The third argument of openlog() specifies a default facility to be

assigned to all messages that do not include an explicit facility code.

The following openlog() call ...

openlog("mailer", LOG_PID, LOG_MAIL);

... prepends the string "mailer" to every log message, ensures that

the message contains the process's ID, and -- if no explicit facility

code is provided in the syslog() call -- it ensures that the message

bears the LOG_MAIL facility code.


The function setlogmask() has the following prototype:

int setlogmask(int maskpri);

It sets the log priority mask for the current process to maskpri and

returns the previous mask. If the maskpri argument is 0, the current

log mask isn't changed. Any calls from the current process to syslog()

with a priority code not set in maskpri are rejected. Use the macro

LOG_MASK(p) to calculate the mask for an individual priority p. To

obtain the mask for all priorities up to and including p_x, use the

macro LOG_UPT(p_x). The default log mask allows all priorities to be

logged. The following setlogmask() call ...


... ensures that only messages whose priority is LOG_ERR and above,

e.g., LOG_CRIT and LOG_EMERG, are logged; messages with lower

priorities such as LOG_DEBUG, are rejected.


Finally, the function closelog() closes any open file descriptors

allocated by previous calls to openlog() or syslog().

ITWorld DealPost: The best in tech deals and discounts.
Shop Tech Products at Amazon