.. _syslog_doc:

Syslog protocol support
=======================

VPP provides `RFC5424 <https://tools.ietf.org/html/rfc5424>`__ syslog
protocol logging, which is used to transport event messages across
network. VPP currently supports UDP transport based on
`RFC5426 <https://tools.ietf.org/html/rfc5426>`__.

The syslog message has the following format: \* header \* structured
data \* free-form message

The header contains, priority, version, timestamp, hostname,
application, process id and message id. It is followed by structured
data, which provides a mechanism to express event data in easily
parsable format. Structured data can contain zero, one or multiple
structured data elements. Structured data element contains name-value
pairs. Structured data can by followed by free-form message.

Following example explains how to use the internal APIs to generate
syslog message:

.. code:: c

      #include <vnet/syslog/syslog.h>

      ...

      syslog_msg_t syslog_msg;

      /* Check if syslog logging is enabled */
      if (!syslog_is_enabled ())
        return;

      /* Severity filer test */
      if (syslog_severity_filter_block (severity))
        return;

      /* Initialize syslog message header */
      syslog_msg_init (&syslog_msg, facility, severity, "NAT", "SADD");

      /* Create structured data element */
      syslog_msg_sd_init (&syslog_msg, "nsess");
      /* Add structured data element parameters (name-value pairs) */
      syslog_msg_add_sd_param (&syslog_msg, "SSUBIX", "%d", ssubix);
      syslog_msg_add_sd_param (&syslog_msg, "SVLAN", "%d", svlan);
      syslog_msg_add_sd_param (&syslog_msg, "IATYP", "IPv4");
      syslog_msg_add_sd_param (&syslog_msg, "ISADDR", "%U",
                               format_ip4_address, isaddr);
      syslog_msg_add_sd_param (&syslog_msg, "ISPORT", "%d", isport);
      syslog_msg_add_sd_param (&syslog_msg, "XATYP", "IPv4");
      syslog_msg_add_sd_param (&syslog_msg, "XSADDR", "%U",
                               format_ip4_address, xsaddr);
      syslog_msg_add_sd_param (&syslog_msg, "XSPORT", "%d", xsport);
      syslog_msg_add_sd_param (&syslog_msg, "PROTO", "%d", proto);

      /* Send syslog message */
      syslog_msg_send (&syslog_msg);

Example above produces following syslog message: <134>1
2018-11-12T11:25:30.252715Z 172.16.4.1 NAT 5901 SADD [nsess SSUBIX=“0”
SVLAN=“0” IATYP=“IPv4” ISADDR=“172.16.1.2” ISPORT=“6303” XATYP=“IPv4”
XSADDR=“10.0.0.3” XSPORT=“16253” PROTO=“6”]

To add free-form message use:

.. code:: c

      syslog_msg_add_msg (&syslog_msg, "event log entry");
