rsyslog は動的ログファイルに書き込まれません。

rsyslog は動的ログファイルに書き込まれません。

私のJavaアプリケーション(Ubuntu 18.04)のsystemdユニットファイルが機能しているようです。 stdoutとstderrをsyslogに送信するように設定し、ログエントリが/var/log/syslogに表示されます。

しかし、動的名前を使用したいので、次のような/etc/rsyslog.d/10-myapp.confを追加しました。

$CreateDirs on

:programname, startswith, "myapp-" {
  /var/log/apps/$programname.log
  stop
}

その後、rsyslogを再起動し、ディレクトリに$programname.logというファイルを取得しました。

動的ファイル名の指定方法に問題があるようです。他の場所で以下を使用している人を見たことがあります。選択のためのさまざまな構文変数名の周りにメッセージと%...%が表示されます。しかし、次のことを試してrsyslogを再起動しても役に立ちませんでした。

:programname, startswith, "myapp-" {
  "/var/log/apps/%programname%.log"
  stop
}

これにより、%programname%.log というファイルが生成されます。

ベストアンサー1

動的ファイル名を使用するには、テンプレートを渡す必要があります。これは文字列の名前を指定しDynFile(通常は例では)、%property%使用時に文字列に値を挿入します。前の構文でテンプレートを使用するには、前に?.Tryを付ける必要があります。

$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
  ?DynFile
  stop
}

レガシーではない構文はより明確で、時には読みやすくなります。実際に組み込まれた機能を使用しています。オームファイル基準寸法。気づく、金型動的ファイル名と記録するデータ型の2つの用途があります。しかし、単純な文字列についても同じ方法で定義されます。たとえば、次のようになります。

template(name="myfile" type="string"
     string="/var/log/apps/%programname%.log")

if ($programname startswith "myapp-") then {
     action(type="omfile" dynaFile="myfile")
     stop
}

これらのキーワードはdynaFileスペルを正確に入力する必要があります。キーワードオプションがaction()ありますtemplate=...。これは、ファイルに書き込まれたデータのテンプレートを提供することです。

おすすめ記事