在单独的日志文件中写入

我试图在应用程序的单独日志文件中编写不同类型的条目。 由于我试图找出的原因,所有条目都出现在所有日志文件中。 我能做错什么?

我想只有关键条目进入/tmp/log/critical.log并调试条目进入/tmp/log/debug.log文件,而所有的进入者都可以进入/tmp/log/all.log日志文件。

以下是/etc/rsyslog.conf文件中的条目

local0.* /tmp/log/all.log local0.alert /tmp/log/alert.log local0.crit /tmp/log/critical.log local0.debug /tmp/log/debug.log local0.emerg /tmp/log/emergency.log local0.err /tmp/log/error.log local0.info /tmp/log/info.log local0.notice /tmp/log/notice.log local0.warning /tmp/log/warning.log 

我的示例c程序编写syslog条目…

 #include main() { openlog("myapp",LOG_CONS|LOG_PID|LOG_NDELAY,LOG_LOCAL0); syslog(LOG_EMERG|LOG_LOCAL0,"Emergency",getuid()); syslog(LOG_ALERT|LOG_LOCAL0,"Alert",getuid()); syslog(LOG_CRIT|LOG_LOCAL0,"Critical",getuid()); syslog(LOG_ERR|LOG_LOCAL0,"Error",getuid()); syslog(LOG_WARNING|LOG_LOCAL0,"Warning",getuid()); syslog(LOG_NOTICE|LOG_LOCAL0,"Notice",getuid()); syslog(LOG_INFO|LOG_LOCAL0,"Information",getuid()); syslog(LOG_DEBUG|LOG_LOCAL0,"Debug",getuid()); closelog(); } 

这里的关键是(你可能已经猜到了)默认是记录你选择的级别和它下面的级别。 您可以通过修改选择器比较在syslog配置文件中更改它。 如果未指定,则默认值为>= ,您需要=

 local0.* /tmp/log/all.log local0.=alert /tmp/log/alert.log local0.=crit /tmp/log/critical.log local0.=debug /tmp/log/debug.log local0.=emerg /tmp/log/emergency.log local0.=err /tmp/log/error.log local0.=info /tmp/log/info.log local0.=notice /tmp/log/notice.log local0.=warning /tmp/log/warning.log 

除了<><=>= ,你可以使用!来否定比较!