在 的实例中给出以下几行/etc/rsyslog.conf
:
$template MyFmt, "%timereported:::date-year%%timereported:::date-month%%timereported:::date-day%_%timereported:::date-hour%%timereported:::date-minute%%timereported:::date-second% %fromhost-ip% %fromhost% %HOSTNAME% %syslogtag%%programname%%msg:::drop-last-lf%\n"
auth,authpriv.* |/path/to/log;MyFmt
假设 syslog 发送者是一个编译的 C++ 程序,即类似:
// main.cpp
#include <ctime>
#include <syslog.h>
int main( int argc, char* artv[] )
{
openlog( "LogTest[456]", 0, LOG_AUTH );
syslog( LOG_AUTH | LOG_INFO, "hello, world %zu", size_t( time( NULL ) ) );
closelog();
return 0;
}
那么为什么 中的条目可能/var/log/secure
有其%syslogtag%
和%programname%
值“ (none)
”?这是否一定意味着程序会调用“ openlog( "(none)", ... );
”?
我尝试修改上述程序以传递openlog()
第一个参数值""
(空字符串)和NULL
.对于前者,结果%syslogtag%
值为空字符串,对于后者,结果%syslogtag%
值为“ a.out
”,即我的可执行文件的名称。(none)
除了明确指定为openlog()
......之外,我想不出还有什么可能会导致“”值?
编辑: 需要明确的是:上面的示例程序才不是结果为%syslogtag%
“ (none)
”值 - 其结果为预期值“ LogTest[456]
”。我的问题更多:除了明确指定为“”之外,什么会导致%syslogtag%
值“ ” ?(none)
openlog()
(我试图了解工作中观察到的行为:在服务器上运行的 rsyslogd 从客户端接收系统日志,并将它们以模板化格式写入管道,如上所述。一些书面内容的值为%syslogtag%
“ (none)
” - 我想了解其潜在原因。)