如何在Python中配置日志到syslog?
我对Python的logging
模块有点搞不懂。我的需求很简单:我只想把所有的日志记录到系统日志(syslog)里。看完文档后,我写了这个简单的测试脚本:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')
但是这个脚本没有在系统日志里生成任何日志记录。到底哪里出了问题呢?
12 个回答
31
你应该始终使用本地计算机来记录日志,不管是通过/dev/log还是通过TCP连接到localhost。这样可以让符合RFC标准并且功能强大的系统日志守护进程来处理syslog。这就不需要依赖远程守护进程的正常运行,同时也能利用像rsyslog和syslog-ng这样的日志守护进程提供的更多功能。对于SMTP也是一样。直接交给本地的SMTP软件处理。在这种情况下,使用“程序模式”,而不是守护进程,但思路是一样的。让更强大的软件来处理这些事情。重试、排队、本地缓存、使用TCP而不是UDP来处理syslog等等,这些都变得可能。你还可以将这些守护进程的配置和你的代码分开,这样做是合理的。
把你的编码留给你的应用程序,让其他软件协同工作,完成各自的任务。
35
我发现syslog模块可以很简单地实现你所描述的基本日志记录功能:
import syslog
syslog.syslog("This is a test message")
syslog.syslog(syslog.LOG_INFO, "Test message at INFO priority")
当然你还可以做其他事情,但我理解的意思是,就算只用前两行代码,也能满足你的需求。
168
把这一行改成这样:
handler = SysLogHandler(address='/dev/log')
这样对我有效
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler(address = '/dev/log')
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')