如何根据过滤的内容创建动态目标文件名?
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));
例如,如果在我的日志行中出现类似 [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));