Dadas as seguintes linhas em uma instância de /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
Suponha que o remetente syslog seja um programa C ++ compilado, ou seja, algo como:
// 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;
}
Então, por que uma entrada em /var/log/secure
tem seus valores %syslogtag%
e %programname%
" (none)
"? Significa necessariamente que o programa teria chamado " openlog( "(none)", ... );
"?
Eu tentei modificar o programa acima para passar openlog()
valores do primeiro argumento ""
(string vazia) e NULL
. No caso do primeiro, o valor %syslogtag%
resultante era uma sequência vazia e, no caso do último, o valor %syslogtag%
resultante era " a.out
", ou seja, o nome do meu executável. Não consigo pensar no que mais poderia resultar em um valor de " (none)
" além de explicitamente especificar openlog()
...?
Editar : Para ser claro: o programa de exemplo acima não resulta em um valor %syslogtag%
de " (none)
" - resulta em um valor esperado de "%código%". Minha pergunta é mais: o que causaria um valor LogTest[456]
de " %syslogtag%
", além de explicitamente especificar (none)
?
(Estou tentando entender o comportamento observado no trabalho: o rsyslogd em execução em um servidor recebe syslogs de clientes e os grava em um formato de modelo para um canal, como acima. Alguns do conteúdo escrito tem um valor openlog()
de " %syslogtag%
" - gostaria de entender as possíveis razões.)