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

时间:2015-03-24 15:14:21

标签: python logging configuration

根据https://docs.python.org/2/library/logging.config.html#configuration-file-format,我可以使用args键指定记录器构造函数的参数。但这似乎只适用于位置论证。我有一个需要一些关键字参数的处理程序。有没有办法在配置文件中指定它们?

3 个答案:

答案 0 :(得分:2)

我很抱歉地告诉你答案是

有关详细信息,请查看https://hg.python.org/cpython/file/2.7/Lib/logging/config.py#l163

如有疑问,源代码永远是您的朋友!

答案 1 :(得分:1)

嗯,我不同意答案是否定的。

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

  

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

[handler_mainHandler]
class=logging.handlers.SysLogHandler
level=INFO
formatter=defaultFormatter
args=('/dev/log','myapp')

Python将'/ dev / log'作为地址关键字参数,将'myapp'作为facility参数。他们按照他们出现的顺序处理。

这样的示例出现在python2python3的文档中:

[handler_hand05]
class=handlers.SysLogHandler
level=ERROR
formatter=form05
args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)

但是有一些缺点:

'将旧式书面配置文件'升级'为yaml编写的配置允许以更好,更明确的方式使用关键字参数。请注意,python2python3的文档明确说明了关键字参数:

  

将使用其中的剩余项目调用callable   配置子字典作为关键字参数。

答案 2 :(得分:0)

使用YAML(而不是 .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'