我正在研究如何从我的 Python 应用程序中登录到 syslog,我发现有两种方法:
- 使用syslog.syslog()例程
- 使用记录器模块SysLogHandler
哪个是最好的选择,每个的优点/缺点等等,因为我真的不知道我应该使用哪个。
我正在研究如何从我的 Python 应用程序中登录到 syslog,我发现有两种方法:
哪个是最好的选择,每个的优点/缺点等等,因为我真的不知道我应该使用哪个。
syslog.syslog()
只能用于向本地 syslogd 发送消息。SysLogHandler
可以用作全面的、可配置的日志记录子系统的一部分,并且可以记录到远程机器。
日志模块是一个更全面的解决方案,它可以潜在地处理您的所有日志消息,并且非常灵活。例如,您可以为您的记录器设置多个处理程序,并且每个处理程序都可以设置为在不同级别进行记录。您可以有一个 SysLogHandler 用于将错误发送到 syslog,一个 FileHandler 用于调试日志,以及一个 SMTPHandler 将真正关键的消息通过电子邮件发送给 ops。您还可以在模块中定义记录器的层次结构,每个记录器都有自己的级别,因此您可以启用/禁用来自特定模块的消息,例如:
import logging
logger = logging.getLogger('package.stable_module')
logger.setLevel(logging.WARNING)
在另一个模块中:
import logging
logger = logging.getLogger('package.buggy_module')
logger.setLevel(logging.DEBUG)
这两个模块中的日志消息将根据级别发送到“包”记录器,并最终发送到您定义的处理程序。您还可以将处理程序直接添加到模块记录器,等等。如果您已经了解了这么多并且仍然感兴趣,那么我建议您跳转到日志记录教程以获取更多详细信息。
到目前为止,还有一个logging.handlers.SysLogHander
尚未提及的缺点。那就是我无法设置LOG_ODELAY
orLOG_NOWAIT
或之类的选项LOG_PID
。另一方面,LOG_CONS
andLOG_PERROR
可以通过添加更多处理程序来实现,并且LOG_NDELAY
默认情况下已经设置,因为在实例化处理程序时连接打开。