如何在 python 中将日志发送到 syslog?
Posted
技术标签:
【中文标题】如何在 python 中将日志发送到 syslog?【英文标题】:How do I send log to syslog in python? 【发布时间】:2020-11-23 00:45:54 【问题描述】:我有一个脚本来处理一个文件。一开始我想检查文件是否存在,如果存在并且不为空或不是太旧。如果满意继续处理。如果不满意,我如何登录到 syslog 并退出而不继续? 这是我的代码:
import sys
import os
import time
if os.path.isfile("/path/file"):
x=os.stat('/path/file')
Result=(time.time()-x.st_mtime)
if os.stat("/path/file").st_size != 0 && Result > 300:
f = open("/path/file", "r")
else:
## log to syslog then exit script
else:
## log to syslog thn exit script
## section to continue processing
f1_to_process = f.read()
...
f.close()
阅读一些关于日志记录的文档,不太了解实现它的正确方法。我不确定我的逻辑是否有意义。我可以给点建议吗?提前致谢。
【问题讨论】:
通常,旨在记录到系统日志的进程将作为服务运行,负责启动它的程序(systemd,在现代 Linux 系统中)负责路由其 stdout 和 stderr到相应的日志。您很少会编写代码来将日志路由为程序本身的一部分——让系统管理员安装您的程序来决定将其输出定向到哪里;他们最清楚自己的企业日志管理标准是什么。 【参考方案1】:您可以将syslog
模块与quit
函数一起使用:
import sys
import os
import time
from syslog import syslog
def log_and_exit(message):
syslog(message)
quit()
if os.path.isfile("/path/file"):
x=os.stat('/path/file')
Result=(time.time()-x.st_mtime)
if os.stat("/path/file").st_size != 0 && Result > 300:
f = open("/path/file", "r")
else:
log_and_exit("foo")
else:
log_and_exit("bar")
## section to continue processing
f1_to_process = f.read()
# ...
f.close()
【讨论】:
感谢@Aplet123,效果很好!我需要在其他方面工作,将“&&”替换为“and”。以上是关于如何在 python 中将日志发送到 syslog?的主要内容,如果未能解决你的问题,请参考以下文章
如何从发送到 Logstash 的 syslog 日志中检索标签?