此代码使用syslog
模块记录到syslog:
import syslog
syslog.syslog(syslog.LOG_ERR, 'a')
这是使用logging
模块的等效代码:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger()
logger.addHandler(SysLogHandler(address='/dev/log'))
logger.setLevel(logging.ERROR)
logger.error('a')
如果我在第二个代码段中遗漏了address
参数,则它不会执行任何操作。为什么logging
版本要求我指定地址,syslog
模块可以自行解决?
我宁愿不必指定这条路径,因为它依赖于平台。我是否必须编写自己的SysLogHandler版本,该版本委托给syslog
模块?
答案 0 :(得分:0)
来自文档:
Note that if your server is not listening on UDP port 514, SysLogHandler may appear not to work.
您是否确认您的系统日志正在侦听SysLogHandler
使用的默认端口(514)?如果它们不相同,那么您需要提供要使用的日志的特定端口号或路径。
请参阅:https://docs.python.org/2/library/logging.handlers.html#sysloghandler
答案 1 :(得分:0)
syslog.syslog
API允许您仅将事件发送到本地计算机上的系统记录器,而通过在Python日志记录中指定地址,您不仅可以记录到本地计算机,还可以记录远程{{1}服务器。因此,日志记录方法涵盖的范围比syslog
更广泛。另请注意,在某些平台/某些环境中,syslog.syslog
并不总是线程安全的(过去),因为底层系统调用API在这些环境中不是线程安全的。这可能不再是这种情况,但最好检查平台上syslog.syslog
的文档。有关更多背景信息,请参阅this Python issue。
此外,您也可以使用日志记录API从Windows计算机登录syslog
服务器(Windows上没有syslog
模块)。