6

アプリケーションとは別のログ ファイルに、さまざまな種類のエントリを書き込もうとしています。調べようとしている理由により、すべてのエントリがすべてのログ ファイルに表示されます。私は何が間違っている可能性がありますか?

重要なエントリのみを /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<syslog.h>

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();
}
4

1 に答える 1

3

ここで重要なのは、(おそらくご想像のとおり) デフォルトでは、選択したレベルとそれより下のレベルでログを記録することです。セレクターの比較を変更することで、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

, ,と同様に<、を使用して比較を否定できます。><=>=!

于 2013-10-10T13:03:22.580 に答える