2014-09-24 35 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

相關問題