在 syslog-ng 中使用正则表达式过滤 Python 消息

在 syslog-ng 中使用正则表达式过滤 Python 消息

我已经将 syslog-ng (v3.4.7) 配置为捕获各自日志中的几乎所有消息,但最近我在 crontab 中包含了一些 python 脚本,它们的输出只是消息或调试(取决于错误级别)。

Apr  7 22:00:02 hostname /python_script_1.py: Message from script #1
Apr  7 23:00:02 hostname /python_script_2.py: Message from script #2
Apr  8 00:00:01 hostname /python_script_1.py: Message from script #1

我试图捕获这些消息并将它们记录在它们自己的日志文件(python.log)中,并且由于脚本具有不同的名称但相同的扩展名,所以我考虑使用正则表达式(\w+[.]py)来识别所有的 python 日志。

我在 syslog-ng 中对这些日志使用以下配置:

source s_system         { system();             };
filter f_python         { match("\w+[.]py" value("PROGRAM"));   };
destination d_python    { file("/var/log/python.log");          };
log { source(s_system); filter(f_python); destination(d_python); };

问题是它们没有被记录。我尝试了"PROGRAM""MESSAGE"值,但没有成功。有知道如何过滤它们吗?

答案1

在另一个过滤器上找到了答案。该过滤器program()允许您在里面使用正则表达式,因此要过滤所有 python 程序,您可以使用

filter f_python     { program(".*[.]py")        };

或者

filter f_python     { program("\w+[.]py")   };

这样,我们的 syslog-ng 日志行

log { source(s_system); filter(f_python); destination(d_python); };

将把所有 *.py 文件记录到所需的日志文件。

相关内容