为什么Python';s的SysLogHandler需要一个地址吗?

为什么Python';s的SysLogHandler需要一个地址吗?,python,logging,python-3.4,syslog,Python,Logging,Python 3.4,Syslog,此代码使用syslog模块登录到syslog: import syslog syslog.syslog(syslog.LOG_ERR, 'a') import logging from logging.handlers import SysLogHandler logger = logging.getLogger() logger.addHandler(SysLogHandler(address='/dev/log')) logger.setLevel(logging.ERROR) log

此代码使用
syslog
模块登录到syslog:

import syslog

syslog.syslog(syslog.LOG_ERR, 'a')
import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger()
logger.addHandler(SysLogHandler(address='/dev/log'))
logger.setLevel(logging.ERROR)
logger.error('a')
下面是使用
日志记录
模块的等效代码:

import syslog

syslog.syslog(syslog.LOG_ERR, 'a')
import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger()
logger.addHandler(SysLogHandler(address='/dev/log'))
logger.setLevel(logging.ERROR)
logger.error('a')
如果我在第二个代码段中省略了
address
参数,那么它不会做任何事情。当
syslog
模块可以自己找到地址时,为什么
日志记录
版本要求我指定地址


我不想指定这个路径,因为它依赖于平台。我是否必须编写自己版本的SysLogHandler,委托给文档中的
syslog
模块?

Note that if your server is not listening on UDP port 514, SysLogHandler may appear not to work.
您是否已验证您的系统日志正在侦听
SysLogHandler
使用的默认端口(514)?如果它们不相同,则需要提供要使用的日志的特定端口号或路径


请参阅:

syslog.syslogAPI允许您仅向本地计算机上的系统记录器发送事件,而通过在Python日志记录中指定地址,您不仅可以将事件记录到本地计算机,还可以记录到远程
syslog
服务器。因此,日志记录方法比
syslog.syslog
涵盖更广泛的环境。还要注意,在某些平台/环境中,
syslog.syslog
并不总是线程安全的(在过去),因为在这些环境中底层系统调用API不是线程安全的。这种情况可能不再存在,但最好在您的平台上查看
syslog
文档。有关更多背景信息,请参见


此外,您也可以使用日志API从Windows机器登录到
syslog
服务器(Windows上没有
syslog
模块)。

包括地址才是区别所在,而不是端口。(抱歉,我对问题进行了大量编辑,可能是在您开始回答之后。)要再次检查我们是否在同一页上,“address”关键字参数是指定(主机、端口)或文件路径的位置。不过,我不确定为什么这些都是相关的。当我根本没有指定任何配置时,SysLogHandler的默认值不应该只调用
syslog.syslog(…)
并执行任何操作吗?“日志记录方法涵盖了更广泛的一组情况”-但不是这一组?好的,所以我的问题的答案是:因为syslog模块通过系统调用进行日志记录,日志处理程序没有这个选项,因为维护人员选择不包含它。谢谢你找到这个问题。您的评论:如果“this one”的意思是“使用syslog.syslog API”,则为否,因为该日志处理程序的目标不是使用该特定API。它允许使用相同的API记录到本地或远程系统日志服务器。因此,如果您需要使用syslog.syslog API,则必须编写自己的处理程序,但考虑到这(显然)不是一个常见的需求,这似乎是公平的(自从将日志添加到Python中以来的十几年中,它只出现过一次)。