Add module for rsyslog. Although rsyslog is supposed to be a drop-in

replacement for sysklogd, it lacks some support for certain arguments
used in the default syslog module of NixOS.
This commit is contained in:
Rob Vermaas 2013-03-15 12:55:49 +01:00
parent f3d063f398
commit 9a9b53aa9f
2 changed files with 106 additions and 0 deletions

View File

@ -86,6 +86,7 @@
./services/logging/logrotate.nix
./services/logging/logstash.nix
./services/logging/syslogd.nix
./services/logging/rsyslogd.nix
./services/mail/dovecot.nix
./services/mail/freepops.nix
./services/mail/mail.nix

View File

@ -0,0 +1,105 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.services.rsyslogd;
syslogConf = pkgs.writeText "syslog.conf" ''
$ModLoad imuxsock
$SystemLogSocketName /run/systemd/journal/syslog
${cfg.defaultConfig}
${cfg.extraConfig}
'';
defaultConf = ''
# "local1" is used for dhcpd messages.
local1.* -/var/log/dhcpd
mail.* -/var/log/mail
*.=warning;*.=err -/var/log/warn
*.crit /var/log/warn
*.*;mail.none;local1.none -/var/log/messages
'';
in
{
###### interface
options = {
services.rsyslogd = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable syslogd. Note that systemd also logs
syslog messages, so you normally don't need to run syslogd.
'';
};
defaultConfig = mkOption {
type = types.string;
default = defaultConf;
description = ''
The default <filename>syslog.conf</filename> file configures a
fairly standard setup of log files, which can be extended by
means of <varname>extraConfig</varname>.
'';
};
extraConfig = mkOption {
type = types.string;
default = "";
example = "news.* -/var/log/news";
description = ''
Additional text appended to <filename>syslog.conf</filename>,
i.e. the contents of <varname>defaultConfig</varname>.
'';
};
extraParams = mkOption {
type = types.listOf types.string;
default = [ ];
example = [ "-m 0" ];
description = ''
Additional parameters passed to <command>rsyslogd</command>.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.rsyslog ];
systemd.services.syslog =
{ description = "Syslog Daemon";
requires = [ "syslog.socket" ];
wantedBy = [ "multi-user.target" "syslog.target" ];
environment.TZ = config.time.timeZone;
serviceConfig =
{ ExecStart = "${pkgs.rsyslog}/sbin/rsyslogd ${toString cfg.extraParams} -f ${syslogConf} -n";
# Prevent syslogd output looping back through journald.
StandardOutput = "null";
};
};
};
}