1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.rsyslogd; 8 9 syslogConf = pkgs.writeText "syslog.conf" '' 10 $ModLoad imuxsock 11 $SystemLogSocketName /run/systemd/journal/syslog 12 $WorkDirectory /var/spool/rsyslog 13 14 ${cfg.defaultConfig} 15 ${cfg.extraConfig} 16 ''; 17 18 defaultConf = '' 19 # "local1" is used for dhcpd messages. 20 local1.* -/var/log/dhcpd 21 22 mail.* -/var/log/mail 23 24 *.=warning;*.=err -/var/log/warn 25 *.crit /var/log/warn 26 27 *.*;mail.none;local1.none -/var/log/messages 28 ''; 29 30in 31 32{ 33 ###### interface 34 35 options = { 36 37 services.rsyslogd = { 38 39 enable = mkOption { 40 type = types.bool; 41 default = false; 42 description = '' 43 Whether to enable syslogd. Note that systemd also logs 44 syslog messages, so you normally don't need to run syslogd. 45 ''; 46 }; 47 48 defaultConfig = mkOption { 49 type = types.string; 50 default = defaultConf; 51 description = '' 52 The default <filename>syslog.conf</filename> file configures a 53 fairly standard setup of log files, which can be extended by 54 means of <varname>extraConfig</varname>. 55 ''; 56 }; 57 58 extraConfig = mkOption { 59 type = types.string; 60 default = ""; 61 example = "news.* -/var/log/news"; 62 description = '' 63 Additional text appended to <filename>syslog.conf</filename>, 64 i.e. the contents of <varname>defaultConfig</varname>. 65 ''; 66 }; 67 68 extraParams = mkOption { 69 type = types.listOf types.str; 70 default = [ ]; 71 example = [ "-m 0" ]; 72 description = '' 73 Additional parameters passed to <command>rsyslogd</command>. 74 ''; 75 }; 76 77 }; 78 79 }; 80 81 82 ###### implementation 83 84 config = mkIf cfg.enable { 85 86 environment.systemPackages = [ pkgs.rsyslog ]; 87 88 systemd.services.syslog = 89 { description = "Syslog Daemon"; 90 91 requires = [ "syslog.socket" ]; 92 93 wantedBy = [ "multi-user.target" ]; 94 95 serviceConfig = 96 { ExecStart = "${pkgs.rsyslog}/sbin/rsyslogd ${toString cfg.extraParams} -f ${syslogConf} -n"; 97 ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/spool/rsyslog"; 98 # Prevent syslogd output looping back through journald. 99 StandardOutput = "null"; 100 }; 101 }; 102 103 }; 104 105}