将关键字arg传递给python日志记录配置文件中的日志处理程序

将关键字arg传递给python日志记录配置文件中的日志处理程序,python,logging,configuration,Python,Logging,Configuration,根据,我可以使用args键为记录器的构造函数指定参数。但这似乎只适用于位置参数。我有一个需要一些关键字参数的处理程序。有没有办法在配置文件中指定这些内容?我很抱歉地告诉您,答案是否 请查看以了解更多详细信息 当有疑问时,源代码永远是你的朋友 我不同意答案是否定的 您可以将关键字参数放在一行中,就像在SysLogHandler的示例中一样,没有位置参数,只有关键字参数: 类logging.handlers.SysLogHandler(地址=('localhost', SYSLOG_UDP_端口),

根据,我可以使用
args
键为记录器的构造函数指定参数。但这似乎只适用于位置参数。我有一个需要一些关键字参数的处理程序。有没有办法在配置文件中指定这些内容?

我很抱歉地告诉您,答案是

请查看以了解更多详细信息


当有疑问时,源代码永远是你的朋友

我不同意答案是否定的

您可以将关键字参数放在一行中,就像在SysLogHandler的示例中一样,没有位置参数,只有关键字参数:

类logging.handlers.SysLogHandler(地址=('localhost', SYSLOG_UDP_端口),facility=LOG_USER,socktype=socket.SOCK_DGRAM)

Python将“/dev/log”作为address关键字参数,“myapp”作为facility参数。他们是按他们出现的顺序来处理的

此类示例见和的文档:

但也有一些缺点:

  • 它不太可读

  • 它是有限的:如果您需要访问外部库,则使用
    ext://
    不起作用。在这种情况下,我建议将旧式配置文件转换为yaml文件,如我在这里的问答中所述:

“升级”旧式编写的配置文件为yaml编写的配置文件,可以更好、更明确地使用关键字参数。请注意,文档以及for和详细讨论了关键字参数:

callable将与中的其余项一起调用 配置子字典作为关键字参数

使用YAML(not.ini),如果使用()特殊键而不是class关键字,则同一级别的所有属性都将作为参数传递给构造函数

例如,使用外部格式化程序时,将忽略log_colors参数:

formatters:
  class:
    class: colorlog.ColoredFormatter
    log_colors: { DEBUG: 'cyan', INFO: 'green', WARNING: 'yellow', ERROR: 'red', CRITICAL: 'red,bg_white' }
    format: '%(log_color)s[%(asctime)s-%(shorter_levelname)s-%(compact_name)s]%(message)s'
    datefmt: '%H:%M:%S'
相反,这将起作用:

formatters:
  color:
    (): colorlog.ColoredFormatter
    log_colors: { DEBUG: 'cyan', INFO: 'green', WARNING: 'yellow', ERROR: 'red', CRITICAL: 'red,bg_white' }
    format: '%(log_color)s[%(asctime)s-%(shorter_levelname)s-%(compact_name)s]%(message)s'
    datefmt: '%H:%M:%S'
formatters:
  class:
    class: colorlog.ColoredFormatter
    log_colors: { DEBUG: 'cyan', INFO: 'green', WARNING: 'yellow', ERROR: 'red', CRITICAL: 'red,bg_white' }
    format: '%(log_color)s[%(asctime)s-%(shorter_levelname)s-%(compact_name)s]%(message)s'
    datefmt: '%H:%M:%S'
formatters:
  color:
    (): colorlog.ColoredFormatter
    log_colors: { DEBUG: 'cyan', INFO: 'green', WARNING: 'yellow', ERROR: 'red', CRITICAL: 'red,bg_white' }
    format: '%(log_color)s[%(asctime)s-%(shorter_levelname)s-%(compact_name)s]%(message)s'
    datefmt: '%H:%M:%S'