2014-09-24 53 views
0

我有以下的日志记录配置:如何访问在config中定义的处理程序?

logging.config.dictConfig({ 
    'version': 1, 
    'handlers': { 
     'console': { 
      'class': 'logging.StreamHandler', 
     }, 
     'summary_verbose': { 
      'level': 0, 
      'class': 'logging.FileHandler', 
      'filename': 'summary_debug.log', 
     }, 
    }, 
    'loggers': { 

     'myapp': { 
      'handlers': ['console'], 
      'level': 'WARNING', 
     }, 
    } 
}) 

有一个未使用的处理程序“summary_verbose”,我想用它,我将在稍后创建记录器(我不想来配置整个处理程序和格式化我应用程序的代码,我想不久的记录初始化配置它大多一次。有没有使用此处理后? 即我怎么能写类似下面?

log_core = logging.getLogger('myapp.some_routine') 
log_core.addHandler('summary_verbose') 

回答

1

这里代码的方式是解决(测试在python 2.7上):

import logging 

summary_verbose_handler = logging.config.logging._handlers['summary_verbose'] 

log_core = logging.getLogger('myapp.some_routine') 
log_core.addHandler(summary_verbose_handler) 

但是,这样的行为不是最佳实践。 如果您需要在某种条件下启动处理程序,那么您最好实施一些filter logic

下面是简单的过滤器的例子:https://github.com/django/django/blob/stable/1.7.x/django/utils/log.py#L160

+0

注意,使用内部'logging._handlers'可能导致此代码的破损,应记录内部在将来改变。正如所暗示的那样,如果不想让处理程序在某些时候发送出东西,最好实施一个过滤器。 – 2014-09-24 07:48:26

相关问题