More work needs to be done to the code to ensure that it corresponds to the
above levels.
As a practical example of how to setup your syslog() to use the new log-
ging feature, suppose you wish to direct all DATA logging to a file named
/var/log/apcupsd.data, all EVENTS to the standard /var/log/messages file
(to be mixed with other system messages), and at the same time send all
EVENTS to /var/log/apcupsd.events, and finally, you want to send all STA-
TUS logging to the named pipe /var/log/apcupsd.status
First as root, you create the named pipe:
mkfifo /var/log/apcupsd.status
Change its permissions as necessary or use the -m option to set them when
creating the pipe.
Then you modify your /etc/syslog.conf file to direct the appropriate levels
of messages where you want them. To accomplish the above, my syslog.conf
file looks like:
# exclude all apcupsd info by default
*.info;local0.none /var/log/messages
# Everything for apcupsd goes here
local0.info;local0.!notice /var/log/apcupsd.data
local0.notice;local0.!warn |/var/log/apcupsd.status
local0.warn /var/log/apcupsd.events
local0.warn /var/log/messages
Developers Notes
All logging functions and all error reporting are now done through the
log
event() subroutine call. Exceptions to this are: initialization code where
printf’s are done, and writing to the status file. Once the initialization code
has completed and the fork() to become a daemon is done, no printf’s are
used. log event() has exactly the same format as syslog(). In fact, the sub-
routine consists of only a syslog() call. If anyone really wishes to log to a
file, the code to do so can easily be done by adding code to log event() in
apclog.c.
120