我有以下日志格式:
-- 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
我想要一行中的完整条目,所以我使用多行扩展:
<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 尝试了不同的值(正则表达式:/^\s*$/ String:"")