#### 18.2.2 syslog, vsyslog ¶

The symbols referred to in this section are declared in the file `syslog.h`.

Function: `void` syslog `(int facility_priority, const char *format, …)` ¶

  Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock dlopen | AC-Unsafe corrupt lock mem fd | See POSIX Safety Concepts.

  `syslog` submits a message to the Syslog facility. It does this by writing to the Unix domain socket `/dev/log`.

  `syslog` submits the message with the facility and priority indicated by facility_priority. The macro `LOG_MAKEPRI` generates a facility/priority from a facility and a priority, as in the following example:

      LOG_MAKEPRI(LOG_USER, LOG_WARNING)

  The possible values for the facility code are (macros):

  `LOG_USER` ¶

    A miscellaneous user process

  `LOG_MAIL` ¶

    Mail

  `LOG_DAEMON` ¶

    A miscellaneous system daemon

  `LOG_AUTH` ¶

    Security (authorization)

  `LOG_SYSLOG` ¶

    Syslog

  `LOG_LPR` ¶

    Central printer

  `LOG_NEWS` ¶

    Network news (e.g. Usenet)

  `LOG_UUCP` ¶

    UUCP

  `LOG_CRON` ¶

    Cron and At

  `LOG_AUTHPRIV` ¶

    Private security (authorization)

  `LOG_FTP` ¶

    Ftp server

  `LOG_LOCAL0` ¶

    Locally defined

  `LOG_LOCAL1` ¶

    Locally defined

  `LOG_LOCAL2` ¶

    Locally defined

  `LOG_LOCAL3` ¶

    Locally defined

  `LOG_LOCAL4` ¶

    Locally defined

  `LOG_LOCAL5` ¶

    Locally defined

  `LOG_LOCAL6` ¶

    Locally defined

  `LOG_LOCAL7` ¶

    Locally defined

  Results are undefined if the facility code is anything else.

  NB: `syslog` recognizes one other facility code: that of the kernel. But you can’t specify that facility code with these functions. If you try, it looks the same to `syslog` as if you are requesting the default facility. But you wouldn’t want to anyway, because any program that uses the GNU C Library is not the kernel.

  You can use just a priority code as facility_priority. In that case, `syslog` assumes the default facility established when the Syslog connection was opened. See Syslog Example.

  The possible values for the priority code are (macros):

  `LOG_EMERG` ¶

    The message says the system is unusable.

  `LOG_ALERT` ¶

    Action on the message must be taken immediately.

  `LOG_CRIT` ¶

    The message states a critical condition.

  `LOG_ERR` ¶

    The message describes an error.

  `LOG_WARNING` ¶

    The message is a warning.

  `LOG_NOTICE` ¶

    The message describes a normal but important event.

  `LOG_INFO` ¶

    The message is purely informational.

  `LOG_DEBUG` ¶

    The message is only for debugging purposes.

  Results are undefined if the priority code is anything else.

  If the process does not presently have a Syslog connection open (i.e., it did not call `openlog`), `syslog` implicitly opens the connection the same as `openlog` would, with the following defaults for information that would otherwise be included in an `openlog` call: The default identification string is the program name. The default default facility is `LOG_USER`. The default for all the connection options in options is as if those bits were off. `syslog` leaves the Syslog connection open.

  If the `/dev/log` socket is not open and connected, `syslog` opens and connects it, the same as `openlog` with the `LOG_NDELAY` option would.

  `syslog` leaves `/dev/log` open and connected unless its attempt to send the message failed, in which case `syslog` closes it (with the hope that a future implicit open will restore the Syslog connection to a usable state).

  Example:

      #include <syslog.h>
      syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
              "Unable to make network connection to %s.  Error=%m", host);

Function: `void` vsyslog `(int facility_priority, const char *format, va_list arglist)` ¶

  Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock dlopen | AC-Unsafe corrupt lock mem fd | See POSIX Safety Concepts.

  This is functionally identical to `syslog`, with the BSD style variable length argument.