Linux version:


system logging utilities.

Apple System Log

syslogd [-d] [-f config_file] [-h] [-l hostlist] [-m interval] [-n] [-p socket] [-a socket] [-r] [-s domainlist] [-v] [-x]

system logging and kernel message trapping,
Use of internet and unix domain sockets enables local and remote logging.

  1. System logging is provided of syslogd
  2. kernel logging is provided by the klogd
Logged message contains a time and a hostname field, and should include a program name field.

If an error occurs during parsing of the config file the whole line is ignored.


-d debug mode. Supress fork to the background.
Use when changing syslog.conf.
-f config file default: /etc/syslog.conf .(N.B. not syslogd)
only contains lines defining destination of messages of the form facility.level destination
-l hostlist hosts that should be logged with simple hostname not fuly qualified domanin name. Multiple hosts are seperated with a colon(: )
-h forward any remote messages to forwarding hosts which have been defined, default messages are not forwarded.
-m minutes MARK interval, -- MARK -- is written to the log files(s)? even if no message were received, confirming that syslogd has been running. Default: 20 minutes.
Setting the interval to zero turns marking off .
-r receive message from the network using an internet domain socket with the syslog service
-s domain:… domainnames stripped off before logging.
No sub-domains may be specified only entire domains.
Example: if -s is specified and the host logging is no action is taken. Specify two domains : -s
-x Disable name lookups when receiving remote messages.
avoids deadlocks when the nameserver is running on the same machine that runs the syslog daemon.
-n don't background. needed if the syslogd is started and controlled by init.
-p socket alternative unix domain socket (port) instead of /dev/log.
-a socket … additional sockets syslogd listens to, needed by a daemon run within a chroot environment.
Up to 19 additional sockets.
-v Print version and exit.


Syslogd reacts to
SIGHUP perform a re-initialization.
Files are closed and the configuration file is re-read

sudo kill -HUP `cat /var/run/syslog*.pid`

SIGTERM syslogd terminates politely

sudo kill -TERM `cat /var/run/syslog*.pid`

die unless debugging is enabled then ignored

SIGUSR1 toggle debugging only if started with -d

sudo kill -USR1 `cat /var/run/syslog*.pid`

SIGCHLD Wait for childs if some were born, because of wall'ing (writeAll) messages.

Configuration File

Lines are of the form
facility.level destination

Prefix the destination filename with - to omit sync'ing the file after every write to it.(reduces I/O load).

Cause ALL messages using the daemon facility
(debug is the lowest priority, so all higher levels match) to go into /var/log/daemons and don't sync I/O system:

daemon.debug -/var/log/daemons

Remote Logging

Enable forwarding (perhaps for consolidation) or receiving messages from another node with -r; Default: ignore network.

Sending and receiving syslogd /etc/services must contain syslog 514/udp otherwise syslogd will die.

To forward messages to another host : use @syslogdhostname in syslog.conf for destination.

For example, to forward ALL messages to a remote host

*.*            @syslogdhostnam

If the remote hostname cannot be resolved at startup, Syslogd will try to resolve the name ten times and then complain. and ????

syslog-loops (bad) : forwarding messages to a syslogd that forwards them back.

In a network provide a central log server to have all the logs kept on one machine.
If the network consists of different domains logging will include fully qualfied names.
-s stripdomain off several domains other than the one the server is located in and only log simple hostnames.

-l define single hosts as local machines.

The UDP socket used to forward messages to remote hosts or to receive messages from them is only opened when it is needed.


A fifo or named pipe can be used as a destination for log messages by prepending a | to the name of the file. the fifo must be created with the mkfifo command before syslogd is started.

# Sample configuration to route kernel debugging # messages ONLY to /var/log/debug which is a named pipe. kern.=debug |/var/log/debug


syslogd and klogd can be run from init or started as part of the /etc/rc.* sequence.
If started from init use -n (don't switch to background.)

There is the potential for the syslogd daemon to be used as a conduit for a denial of service attack. A rogue program(mer) could flood the syslogd daemon with syslog messages resulting in the log files consuming all the remaining space on the filesystem. Activating logging over the inet domain sockets will expose a system to risks outside of programs or individuals on the local machine.

There are a number of methods of protecting a machine:

  1. Implement kernel firewalling to limit which hosts or networks have access to the 514/UDP socket.
  2. Log to an non-root filesystem.
  3. Log to an ext2 filesystem which can be configured to limit a percentage of a filesystem to usage by root only, requiring syslogd to be run as a non-root process.
  4. Disabling inet domain sockets limits risk to the local machine, preventing remote logging since syslogd will be unable to bind to the 514/UDP socket.


-d verbose display of activity is output to stdout.

When the configuration file is read a tabular report is output:

  1. number sequence number representing the position in the internal data structure.
    An omitted sequence number indicates an error in /etc/syslog.conf.
  2. pattern
    columns are the facility (only the left most are used. )
    field in a column represents priorities
  3. action when a message is received that matches the pattern.
  4. arguments additional arguments to the actions
    1. file-logging filename for the logfile;
    2. user-logging list of users;
    3. remote logging hostname of the machine to log to;
    4. console-logging used console;
    5. tty-logging specified tty; wall has no additional arguments.


/etc/syslog.conf syslog.conf(5)
/dev/log, socket used by local syslog
/var/run/, file containing the process id of syslogd.


(from /etc/services)
syslog          514/udp  
syslog-conn     601/udp     # Reliable Syslog Service
syslog-conn     601/tcp     # Reliable Syslog Service

If an error occurs in one line the whole rule is ignored. (Don't forget the # to preceed comments (NOT ALL VERSIONS)

Syslogd doesn't change the permissions of logfiles.
created files are world readable.
Use savelog(8) to rotate logfiles.
It is a security hole if everybody is able to message from the auth.* facility.

syslogBDS really Mac OSX ; darwin syslog-ngBalaBit Ltd version syslog.conf klogd(8), logger, syslog(2), syslog(3), services(5), savelog(8)

From smacker OS X 10.5.7 6/18/09

#  Emergency  (0)  note counter-intuitive Emergency has a level less than Debug.
#  Alert     #  Critical #  Error   #  Warning #  Notice #  Info #  Debug 

*.err                                                               /dev/console
kern.*;auth.notice;authpriv,remoteauth,install.none;mail.crit       /dev/console
# DONT Send messages to the serial port.
#*.err;kern.*;auth.notice;authpriv,remoteauth.none;mail.crit        /dev/tty.serial

*.notice                         /var/log/system.log
mail.crit                        /var/log/system.log
kern.debug                       /var/log/system.log
authpriv,remoteauth,ftp          /var/log/system.log
install.none                     /var/log/system.log

# authpriv log file should be restricted access;authpriv.*            /var/log/secure.log
remoteauth.crit                 /var/log/secure.log                        /var/log/lpr.log
mail.*                          /var/log/mail.log
ftp.*                           /var/log/ftp.log
install.*                       /var/log/install.log
install.*                       @
local0.*                        /var/log/appfirewall.log
local1.*                        /var/log/ipfw.log

*.emerg                             *
*.alert                         /var/log/01-alert.log
*.crit                          /var/log/02-crit.log
##see above *.err               /var/log/03-err.log
*.warn                          /var/log/04-warn.log
##see above *.notice            /var/log/05-notice.log
*.notice                        /var/log/05-notice.log
*.info                          /var/log/06-info.log
*.debug                         /var/log/07-debug.log
sudo.*                          /var/log/sudo.log

OS X darwin plist for launchd
 <key>Label</key> <string></string>
    <key>OnDemand</key> <false/>
    <key>HopefullyExitsLast</key> <true/>
    <key>EnableTransactions</key> <true/>
    <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> </array>
    <key>MachServices</key> <dict> <key></key> <true/> </dict>
    <key>Sockets</key> <dict> <key>AppleSystemLogger</key> 
        <dict> <key>SockPathName</key> <string>/var/run/asl_input</string>
            <key>SockPathMode</key> <integer>438</integer>
        <dict> <key>SockPathName</key> <string>/var/run/syslog</string>
            <key>SockType</key> <string>dgram</string>
            <key>SockPathMode</key> <integer>438</integer>
OS X darwin plist for rotating logs newsyslog
 <key>Label</key> <string></string>
    <key>ProgramArguments</key> <array> <string>/usr/sbin/newsyslog</string> </array>
    <key>LowPriorityIO</key> <true/>
    <key>Nice</key> <integer>1</integer>
    <key>StartCalendarInterval</key> <dict> <key>Minute</key> <integer>30</integer> </dict>
See: rsyslogd

Collaborators: Syslogd is taken from BSD sources, Greg Wettstein ( performed the port to Linux,