gpt4 book ai didi

python - 如何在Python中的YAML文件中设置logging.handlers.SysLogHandler的输出

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:51 25 4
gpt4 key购买 nike

我有以下配置文件:

[loggers]
keys=MYLogger

[handlers]
keys=fileHandler,streamHandler,sysHandler

[formatters]
keys=simpleFormatter

[logger_MYLogger]
level=INFO
handlers=fileHandler
qualname=MYLogger
propagate=0

[handler_fileHandler]
class=FileHandler
formatter=simpleFormatter
args=('mylog.log',)

[handler_streamHandler]
class=StreamHandler
formatter=simpleFormatter
args=(sys.stdout,)

[handler_sysHandler]
class=logging.handlers.SysLogHandler
formatter=simpleFormatter
args=('/dev/log',)


[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s : %(message)s
datefmt=%Y-%m-%d %H:%M:%S

我需要将其转换为 YAML 文件。我已经成功完成了,除了 sysHandler 的部分:

  version: 1
formatters:
simpleFormatter:
format: '%(asctime)s - %(name)s - %(levelname)s : %(message)s'
datefmt: '%Y-%m-%d %H:%M:%S'
handlers:
stream:
class: logging.StreamHandler
formatter: simpleFormatter
stream: ext://sys.stdout
file:
class: logging.FileHandler
formatter: simpleFormatter
filename: mylog.log
# sys:
# class: logging.handlers.SysLogHandler
# formatter: simpleFormatter
# stream: /dev/log
loggers:
MYLogger:
level: INFO
handlers: [stream, file]

如何以 yaml 格式为 sysHandler 提供参数?为什么可以简单地将参数放入原始配置文件中,而在这里我必须指定流/文件名?

最佳答案

日志记录dictionary schema details关于处理程序有以下几点要说:

handlers - the corresponding value will be a dict in which each key is a handler 
id and each value is a dict describing how to configure the corresponding Handler
instance.

The configuring dict is searched for the following keys:

class (mandatory). This is the fully qualified name of the handler class.
level (optional). The level of the handler.
formatter (optional). The id of the formatter for this handler.
filters (optional). A list of ids of the filters for this handler.

All other keys are passed through as keyword arguments to the handler’s
constructor.

SysLogHandler 具有以下内容 signature :

SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)

stream不是处理程序的强制或可选键,它作为关键字参数传递给SysLogHandler(),并且这不是您可以使用的关键字用于实例化该类的实例。

StreamHandler 的非强制/可选键(即stream)和FileHandler (即文件名)与各自的签名匹配)。

我假设您确实必须提供以元组参数作为序列的地址,才能接受:

sys:
class: logging.handlers.SysLogHandler
formatter: simpleFormatter
address: [localhost, /dev/log]

(请注意,INI 样式配置文件中 [handler_sysHandler]args 条目应以元组开头。来自 logging documentation :

args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)

关于python - 如何在Python中的YAML文件中设置logging.handlers.SysLogHandler的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39224892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com