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は、上記のようにクライアントからsyslogを受け取り、それをテンプレート形式でパイプに書き込みます。一部作成されたコンテンツの値は%syslogtag%" (none)"です。これの根本的な理由を知りたいです。 )

ベストアンサー1

おすすめ記事