我有一个应用程序,它记录到 syslog 工具 local1。我想配置 syslog 将所有 local1 消息发送到与 /var/log/messages 分开的日志文件——这很容易。但消息还转到 /var/log/messages。有什么方法可以告诉 syslog 将 *.info 发送到 /var/log/messages 但排除 local1.info?(类似 *^loacl1.info ?)
系统日志.conf:
#kern.* /dev/console
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
local0.notice;local0.debug;mail.*;mail.none;mail.info;local0.info /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#My Custom App Logging
local1.* /var/log/application.log
答案1
尝试更换
*.info;mail.none;authpriv.none;cron.none /var/log/messages
经过
*.info;mail.none;authpriv.none;cron.none;local1.!=info /var/log/messages
这将记录匹配以下项的消息:任何具有信息级别的设施,且设施不是邮件设施,且设施不是 authpriv并且设施 local1 除级别为信息外。
答案2
你应该使用
#My Custom App Logging
local1.* /var/log/application.log
& ~
对于系统日志或
#My Custom App Logging
local1.* /var/log/application.log
& stop
rsyslog 7+ 版本,以防止进一步处理日志消息。确保前*.*
记录到 /var/log/syslog的默认规则。
答案3
只是对@radius 答案的赞美
根据 rsyslog 文档 https://www.rsyslog.com/doc/v8-stable/configuration/filters.html
您可以使用逗号(“,”)运算符在一个语句中指定具有相同优先级模式的多个设施
我更喜欢使用下面的代码
*.info;mail, authpriv, cron.none;local1.!=info /var/log/messages
顺便说一句,这将记录匹配的消息:任何具有级别信息及更高级别的设施,以将其限制为仅您可以使用的信息
您可以在每个优先级前面加上等号(“=”),以仅指定此单个优先级,而不指定上述任何优先级
*.=info;mail, authpriv, cron.none;local1.!=info /var/log/messages