为什么 Python 的 SysLogHandler 需要一个地址?
Why does Python's SysLogHandler require an address?
此代码使用 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
模块?
来自文档:
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
syslog.syslog
API 允许您仅将事件发送到本地计算机上的系统记录器,而通过在 Python 日志记录中指定地址,您不仅可以记录到本地机器也是远程 syslog
服务器。因此,日志记录方法涵盖了比 syslog.syslog
更广泛的情况。另请注意,在某些平台/某些环境中,syslog.syslog
并不总是线程安全的(过去),因为底层系统调用 API 在这些环境中不是线程安全的。这可能不再是这种情况,但最好在您的平台上查看 syslog
的文档。有关更多背景信息,请参阅 this Python issue。
此外,您也可以使用日志 API 从 Windows 机器登录到 syslog
服务器(syslog
模块在 Windows).
此代码使用 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
模块?
来自文档:
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
syslog.syslog
API 允许您仅将事件发送到本地计算机上的系统记录器,而通过在 Python 日志记录中指定地址,您不仅可以记录到本地机器也是远程 syslog
服务器。因此,日志记录方法涵盖了比 syslog.syslog
更广泛的情况。另请注意,在某些平台/某些环境中,syslog.syslog
并不总是线程安全的(过去),因为底层系统调用 API 在这些环境中不是线程安全的。这可能不再是这种情况,但最好在您的平台上查看 syslog
的文档。有关更多背景信息,请参阅 this Python issue。
此外,您也可以使用日志 API 从 Windows 机器登录到 syslog
服务器(syslog
模块在 Windows).