为什么 rsyslog %syslogtag% 显示“(无)”?

为什么 rsyslog %syslogtag% 显示“(无)”?

在 的实例中给出以下几行/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)” - 我想了解其潜在原因。)

相关内容