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

我想要一行中的完整条目,所以我使用多行扩展:

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

4

1 回答 1

0

这条线需要修复。

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

应该

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