0

次のログ形式があります。

-- 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: " ")

4

1 に答える 1

0

この行は修正する必要があります。

Exec if $raw_event !~ /^--/ drop()

する必要があります

Exec if $raw_event =~ /^--/ drop()
于 2015-11-27T14:21:27.137 に答える