基于消息内容的系统日志目标

syslog destination based on message content

我正在尝试动态设置系统日志消息的目标,但我不知道该怎么做。我想根据消息的内容将消息记录到某些文件夹。

例如,我虚构的程序将根据对象的 ID 记录有关系统中对象的消息。因此,对象上的每个 CRUD 操作都使用它的 ID 进行记录。我想根据每个对象的 ID 为其创建一个单独的日志文件。

如果有一种方法可以通过正则表达式解析出 ID,存储 ID,然后在目标中使用它,就可以满足我的要求。

类似这样的东西(明显是伪代码,不起作用),其中每条日志消息都有对象ID作为日志文件名,在括号中存储的每条日志消息中,是4位数字:

# somehow parse out value that matches the regex \[\s\d][\s\d][\s\d][\s\d]\] and store it in $id
destination df_dest { file("/v/logs/${YEAR}${MONTH}${DAY}/$id.log"); };
filter f_program { program("program"); };
log { source(s_all); filter (f_program); destination (df_dest); flags(final); };

在这种情况下会有 2 个日志文件...

1234.log

6789.log

...每个都有 2 条消息。

[1234] Updated.
[1234] Deleted.
[6789] Created.
[6789] Fetched.

非常感谢任何帮助。

Syslog 本身 不允许您的想法。 syslog facilities 允许使用 localx 工具将日志记录到单独的文件。但是他们限制在8个。

要使用 syslog 实现您想要的,即根据日志消息的内容记录到不同的文件,您将必须编写自定义 syslog output plugin