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.)