![在 syslog-ng 中使用正则表达式过滤 Python 消息](https://linux22.com/image/630734/%E5%9C%A8%20syslog-ng%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BF%87%E6%BB%A4%20Python%20%E6%B6%88%E6%81%AF.png)
我已经将 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 文件记录到所需的日志文件。