如何根据过滤的内容创建动态目标文件名?

How can I create dynamic destination files name based on what is filtered?

例如,如果在我的日志行中出现类似 [xxx] 的内容,我必须将此消息放入一个名称以 xxx.log 开头的文件中 如果消息发生变化并出现 [xxy],我必须创建一个名为 xxy.log 的新日志文件 我怎样才能在 syslog-ng 配置文件中做到这一点?

要过滤特定消息,您可以在 syslog-ng 中使用过滤表达式: 您也可以在过滤器中使用正则表达式。 要在文件名中使用匹配结果,请尝试在过滤器表达式中使用命名模式:

filter f_myfilter {message("(?<name>pattern)");};

然后您可以在目标模板中使用命名匹配项:

destination d_file {
    file ("/var/log/${name}.log");
};

让我知道它是否有效,我还没有时间测试它。

我找到了解决 mi 问题的方法。

parser p_apache {
    csv-parser(columns("MY.ALGO", "MY.MOSTRAR", "MY.OTRA")
         delimiters("|")
         );
};

destination d_file {
    file("/var/log/syslog-ng/$YEAR-$MONTH/$DAY/messages-${MY.ALGO:-nouser}.log");
};

正则表达式就是这里的答案。

例如:我的源文件名为 access2018-10-21.log,因此我的访问日志源文件条目变为

file("/opt/liferay-portal-6.2-ee-sp13/tomcat-7.0.62/logs/access[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9].log" follow_freq(1) flags(no-parse));