# 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 == 'charon') or \
    ($programname == 'dhcpcd') or \
    ($programname == 'hermes') or \
    ($programname == 'l2tpipsec_vpn') or \
    ($programname == 'mist') or \
    ($programname == 'ModemManager') or \
    ($programname == 'nss-get-cert') or \
    ($programname == 'openvpn') or \
    ($programname == 'openvpn-script') or \
    ($programname == 'patchpaneld') or \
    ($programname == 'pppd') or \
    ($programname == 'pseudomodem') or \
    ($programname == 'shill') or \
    ($programname == 'wpa_supplicant')) then -/var/log/net.log

# Log important (EMERG..ERR) network stuff in /var/log/messages too,
# but discard anything less severe
if (($programname == 'charon') or \
    ($programname == 'dhcpcd') or \
    ($programname == 'hermes') or \
    ($programname == 'l2tpipsec_vpn') or \
    ($programname == 'mist') or \
    ($programname == 'ModemManager') or \
    ($programname == 'nss-get-cert') or \
    ($programname == 'openvpn') or \
    ($programname == 'openvpn-script') or \
    ($programname == 'patchpaneld') or \
    ($programname == 'pppd') or \
    ($programname == 'pseudomodem') or \
    ($programname == 'shill') or \
    ($programname == 'wpa_supplicant')) 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
