我们有一个运行 Ubuntu 10.04.4 LTS 的 vps,在尝试寻找 php 问题的解决方案时,我意识到 syslog 系统似乎存在问题 - 但我不确定。
syslog.conf 文件如下所示:
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* -/var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/opt/psa/var/log/maillog
user.* -/var/log/user.log
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info -/var/log/mail.info
mail.warning -/var/log/mail.warn
mail.err -/var/log/mail.err
# Logging for INN news system
#
news.crit -/var/log/news/news.crit
news.err -/var/log/news/news.err
news.notice -/var/log/news/news.notice
#
# Some `catch-all' logfiles.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warning;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
#
# Emergencies are sent to everybody logged in.
#
*.emerg *
#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warning /dev/tty8
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
# busy site..
#
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warning |/dev/xconsole
/var/log/syslog 文件包含大量如下条目:
Jun 10 04:04:00 lvps109-104-93-171 postfix/qmgr[688]: 814E0676E997: removed
Jun 10 04:04:01 lvps109-104-93-171 postfix/smtpd[11105]: connect from mail-we0-f196.google.com[74.125.82.196]
尽管上述配置将相关消息定向到 /var/log/mail.info、/var/log/mail.warn 和 /var/log/mail.err,但它们都是空的。
我尝试将“ mail.* -/var/log/mail.log
”添加到 conf 文件中,以查看是否可以在那里重复 smtp 和 qmgr 消息,但该日志文件也保持为空。
我尝试将“ *.*;auth,authpriv.none -/var/log/syslog
”更改为*.*;auth,authpriv.none;mail.none -/var/log/syslog
,看看是否可以阻止任何 postfix 消息进入 /var/log/syslog,但它们仍继续进入那里。
我已经搜索了很长时间,想要找到将这些 postfix 消息重定向到 mail.log 文件所需的命令,但我发现的帖子似乎只提到了 .info、.err 和 .warn 消息。据我所知,syslog 守护程序应该将它们定向到相关文件。
所以我的问题是:如何将 postfix 消息从 /var/log/syslog 重定向出去?为什么 .warn、.info 和 .err 消息没有到达它们应该到达的地方?
非常感谢您的帮助。
答案1
我猜你用的是 rsyslog?你必须告诉 rsyslog 在将消息写入相应文件后停止处理该消息。这可以通过 来完成& ~
。
mail.* -/var/log/mail.info
& ~
把这些行前包含 的行*.*
。
完成后重新启动 syslog。
答案2
这是我在 Ubuntu 14.04.1 LTS 中为使邮件项目不受系统日志影响而采取的方法:
*.*;mail,auth,authpriv.none /var/log/syslog
我用这个将邮件日志分为错误日志和非错误日志,这也是有效的:
mail.debug;mail.!err /var/log/mail.log
mail.err /var/log/mail.err
基本上,.debug 级别及以上的所有内容都会进入 mail.log,但 .err 级别及以上的所有内容则会进入 mail.err 文件。
我能想到的唯一可能导致您的邮件日志文件为空的原因是在文件路径前面有 - ,我认为这与没有立即写入日志有关。
参考:‘选择器’部分http://www.rsyslog.com/doc/rsyslog_conf_filter.html
答案3
上面,TraceElements 说以下是解决方案的一部分,但第一行对我来说似乎是违反直觉的,即:
*.*;mail,auth,authpriv.none /var/log/syslog
这一行是做什么的?在我看来,它应该将邮件消息添加到 /var/log/syslog,但我们在这里尝试做相反的事情。啊哈,它可能扩展为 mail.none 吗?但为什么 OP 尝试以下解决方案对他/她不起作用?那是:
*.*;auth,authpriv.none;mail.none -/var/log/syslog
但是他/她说,“看看我是否可以阻止任何 postfix 消息进入 /var/log/syslog,但它们仍然继续进入那里。”
是不是因为他的第二个分号把一切都搞乱了?
无论如何,在 Ubuntu 16.04.2 LTS 上,TraceElement 的解决方案对我来说是有效的。
答案4
这一行:
*.*;auth,authpriv.none -/var/log/syslog
表示对数每个设施在每一个级别到 /var/log/syslog,authpriv 是唯一的例外。显然这包括邮件。
您还告诉 syslog 不要立即同步文件;这意味着如果您没有收到很多电子邮件日志行,它们可能不会立即写入邮件日志文件。但是,syslog 文件将包含如此多的消息,因此可能会提前写入。
此外,在对文件进行更改后,您需要重新启动日志服务。通常只需向 syslogd 进程的 PID 发送 HUP 即可完成此操作。完成此操作后,请检查 /var/log/syslog 中是否有任何关于 syslogd.conf 中无法解析的行的消息。