次のログ形式があります。
-- New Entry -------------------------
08:03:10 01.04.15 ncjhdnbchjbdc
08:03:10 jnkjsdncksjdnc
xd1: ndkjewnckjdwcndw
xd2: jncxkjdsnkjcndsqckjnc c cw djkcdnc cnd kj nc
08:03:10 dscsdcdsc
-- New Entry -------------------------
08:03:10 01.04.15 ncjhdnbchjbdc
08:03:10 jnkjsdncksjdnc
xd1: ndkjewnckjdwcndw
xd2: jncxkjdsnkjcndsqckjnc c cw djkcdnc cnd kj nc
08:03:10 dscsdcdsc
完全なエントリを 1 行で表示したいので、複数行の拡張機能を使用します。
<Extension multiline>
Module xm_multiline
HeaderLine /^--/
EndLine " "
</Extension>
<Input in>
Module im_file
File "input.txt"
SavePos TRUE
ReadFromLast TRUE
InputType multiline
Exec if $raw_event !~ /^--/ drop();
Exec $raw_event = replace($raw_event, "\r\n", ";");
</Input>
<Output out>
Module om_file
File "output.txt"
</Output>
<Route 1>
Path in => out
</Route>
複数行の拡張子は、nxlog の開始後に入力ファイル内の既存のエントリに対して期待どおりに機能します。新しいエントリが出力に正しく書き込まれません。出力にはヘッダーのみが書き込まれます。誰かが私が間違っていることを知っていますか?
更新: im_file の PollInterval が問題のようです。nxlog のドキュメント (セクション xm_multiline) に次のように記載されています。
注 新しいヘッダーが読み取られるまで、モジュールはメッセージの終わりを認識しないため、前のメッセージがバッファーに保管されます。im_file モジュールは、構成された PollInterval タイムアウトの後に、このバッファーを強制的にフラッシュします。この動作が受け入れられない場合は、ある種のカプセル化方法 (JSON、XML、RFC5425 など) の使用を検討するか、可能であれば EndLine で終了マーカーを使用してください。
それで、エンドマーカーを使用していますが、機能しません。EndLine に別の値を試してみました (regex: /^\s*$/ String: " ")