# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#

$ModLoad immark.so # provides --MARK-- message capability
module(load="imuxsock"
       SysSock.Use="on"
       SysSock.Name="/run/systemd/journal/syslog")
# Allow messages from upstart, which logs through /dev/klog.
module(load="imklog"
       PermitNonKernelFacility="on")

$PrivDropToUser syslog
$PrivDropToGroup syslog

# Don't include hostname in log messages.
template(name="LogWithoutHostname" type="string"
         string="%TIMESTAMP:::date-rfc3339% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg::drop-last-lf%\n")
module(load="builtin:omfile" Template="LogWithoutHostname")

$RepeatedMsgReduction on

# Merge and include all *.conf files.
# This should come after any settings that are meant to be inherited by the
# *.conf files that are to be included.
$IncludeConfig /etc/rsyslog.d/*.conf

# Keep network stuff in /var/log/net.log
if (($programname == 'shill') or \
    ($programname == 'dhcpcd') or \
    ($programname == 'wpa_supplicant') or \
    ($programname == 'ModemManager') or \
    ($programname == 'mist') or \
    ($programname == 'nss-get-cert') or \
    ($programname == 'openvpn') or \
    ($programname == 'openvpn-script') or \
    ($programname == 'l2tpipsec_vpn') or \
    ($programname == 'pppd') or \
    ($programname == 'pseudomodem') or \
    ($programname == 'arc-networkd') or \
    ($programname == 'charon')) then -/var/log/net.log

# Log important (EMERG..ERR) network stuff in /var/log/messages too,
# but discard anything less severe
if (($programname == 'shill') or \
    ($programname == 'dhcpcd') or \
    ($programname == 'wpa_supplicant') or \
    ($programname == 'ModemManager') or \
    ($programname == 'mist') or \
    ($programname == 'nss-get-cert') or \
    ($programname == 'openvpn') or \
    ($programname == 'openvpn-script') or \
    ($programname == 'l2tpipsec_vpn') or \
    ($programname == 'pppd') or \
    ($programname == 'pseudomodem') or \
    ($programname == 'arc-networkd') or \
    ($programname == 'charon')) and $syslogseverity >= '4' then ~

# Keep Upstart logs in /var/log/upstart.log
# Since these go through the kernel ring buffer, the $programname is 'kernel'.
# We can match against messages from init with:
# re_match($msg, "\\[ *[0-9]+\\.[0-9]+\\] init: .*")
# but we'll use a simpler string comparison to avoid the performance penalty of
# running a regex on every kernel message.
if $programname == 'kernel' and ($msg contains "] init: ") \
    then -/var/log/upstart.log

# Log important (EMERG..ERR) Upstart stuff in /var/log/messages too.
if $programname == 'kernel' and ($msg contains "] init: ") and \
    $syslogseverity >= '4' then ~

# Keep tlsdate stuff in /var/log/tlsdate.log
if ($programname startswith 'tlsdate') then -/var/log/tlsdate.log
& ~  # Don't log tlsdate messages anywhere else.

# For authpolicyd and authpolicy_parser:
# - Log all messages to /var/log/authpolicy.log.
# - Log important stuff (EMERG..ERR) to /var/log/messages.
if ($programname startswith 'authpolicy') then -/var/log/authpolicy.log
if ($programname startswith 'authpolicy') and $syslogseverity >= '4' then ~

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.*;mail.none;authpriv.none;local5.none                 -/var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
