# 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
$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
$ModLoad imklog.so # kernel logging (formerly provided by rklogd)

# Merge and include all *.conf files.
$IncludeConfig /etc/rsyslog.d/*.conf

$PrivDropToUser syslog
$PrivDropToGroup syslog

# Include PID in log messages
$SystemLogUsePIDFromSystem on

# Don't include hostname in log messages.
$template LogWithoutHostname,"%TIMESTAMP:::date-rfc3339% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg::drop-last-lf%\n"
$ActionFileDefaultTemplate LogWithoutHostname

$SystemLogRateLimitInterval 0
$RepeatedMsgReduction on

# Allow messages from upstart, which logs through /dev/klog.
$KLogPermitNonKernelFacility on

# Keep network stuff in /var/log/net.log
if (($programname == 'shill') or \
    ($programname == 'dhcpcd') or \
    ($programname == 'wpa_supplicant') or \
    ($programname == 'cromo') 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 == 'wimax-manager') 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 == 'cromo') 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 == 'wimax-manager') or \
    ($programname == 'pseudomodem') or \
    ($programname == 'arc-networkd') or \
    ($programname == 'charon')) 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

# Copy these messages to tty8 to help with troubleshooting.
# Don't log authentication messages, mail, or wpa_supplicant(local6).
*.*;mail.none;authpriv.none;local6.none                 /dev/tty8

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

# Everybody gets emergency messages
*.emerg                                                 *

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

# laptop-mode can be configured to log to local5
local5.info                                             /var/log/laptopmode.log
