我正在使用 Solaris 10 并在中看到了这一行/etc/syslog.conf
*.err;kern.debug;daemon.notice;mail.crit;auth.debug;local2.notice /var/adm/messages
这是否意味着,如果我有一个授权错误/var/adm/message
,由于以下原因,错误消息将出现在我的两次中:
*.err
auth.debug
如果假设我还有另一行:
*.emerg *
*.err;kern.debug;daemon.notice;mail.crit;auth.debug;local2.notice /var/adm/messages
这是否意味着,如果我有一个内核.emerg,它将记录两次,/var/adm/messages
因为
*.emerg * and
kern.debug /var/adm/messages
?
=======
添加于
auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
syslog 如何检查这台机器是否是日志主机?通过检查 /etc/hosts 中的“loghost”别名并查看它是否与机器的 IP 匹配?
我的 syslog.conf 没有 ifdef,但它仍然有效,ifdef 是否必要?
答案1
这些规则主要定义在运行时应用于每条消息的过滤器,因此实际上,您不应该在同一目标/文件中存在重复的消息。
可以使用分号('';'')分隔符为单个操作指定多个选择器。请记住,选择器字段中的每个选择器都能够覆盖前面的选择器。
但是,您可以并且确实收到发送到不同文件(包括控制台)的相同消息。
如果是
*.emerg *
这是 syslog 中所有用户的简写,它适用于所有用户。
大家都登录了
紧急消息通常会发送给当前在线的所有用户,通知他们系统发生了异常情况。要指定此 wall(1) 功能,请使用星号 (''*'')。
因此,实际上,在 kernel.emerg 中,会将其发送给所有用户,并同时发送给 /var/adm/messages ;但是 /var/adm/messages 中只有一行。
原始 BSD syslogd 的行为是根据给定的操作记录指定优先级及更高优先级的所有消息。
引用自手册syslog.conf
页:
至于ifdef,举个例子:
auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
如果定义了LOGHOST(即此syslog是一个LOGHOST,它将发送日志/消息到/var/log/authlog,否则将发送到@loghost。
至于ifdef则不是必需的,至于LOGHOST,根据这一页它是从文件 /etc/hosts 中获取的机器名称(或者可能是 DNS,仅测试)
编辑 /etc/hosts (./inet/hosts) 并添加一行或多行定义 loghost 的 IP 地址(名称是任意的,如果定义了多个远程主机,您可以使用您想要的任何名称)