2012-12-10 123 views
1

我有多個Python模塊,每個模塊都有單獨的日誌配置文件。我使用的YAML,所以我只是做了多個實例和多個目標

log_config_dict=yaml.load(open(config_file1, 'r')) 
    logging.config.dictConfig(log_config_dict)    
    self.main_logger=logging.getLogger('Main_Logger') 

在另一個模塊,我有一些像

log_config_dict=yaml.load(open(config_file2, 'r')) 
    logging.config.dictConfig(log_config_dict)  
    self.main_logger=logging.getLogger('Poller_Main_Logger') 

的2個伐木者正在寫分離的日誌文件。然後,在每個單獨的模塊的代碼,我作爲記錄 -

 self.main_logger.info(log_str) 

但是預期這是行不通的。假設我從module1,然後從module2,然後再從module1進行記錄,日誌消息要麼寫入到module2的目的地,要麼根本不寫入。

任何想法發生了什麼?每次我執行dictConfig調用時,以前的記錄器是否被禁用?有沒有辦法解決?

下面 - 日誌配置文件

version: 1 
formatters: 
    default_formatter: 
    format: '%(asctime)s : %(levelname)s : %(message)s' 
    datefmt: '%d-%b-%Y %H:%M:%S' 
    plain_formatter: 
    format: '%(message)s' 
handlers: 
    console_default_handler: 
    class: logging.StreamHandler 
    level: INFO 
    formatter: default_formatter 
    stream: ext://sys.stdout 
    console_error_handler: 
    class: logging.StreamHandler 
    level: WARNING 
    formatter: default_formatter 
    stream: ext://sys.stderr 
    logfile_handler:  
    class: logging.FileHandler 
    filename: logger.txt 
    mode: a 
    formatter: default_formatter 
    level: DEBUG  
    errfile_handler:  
    class: logging.FileHandler 
    filename: error.txt 
    mode: a 
    formatter: default_formatter 
    level: WARNING  
    plain_handler: 
    class: logging.StreamHandler 
    level: DEBUG 
    formatter: plain_formatter 
    stream: ext://sys.stdout 
loggers: 
    Poller_Main_Logger: 
    level: DEBUG 
    handlers: [console_default_handler,logfile_handler] 
    propagate: no 
    Plain_Logger: 
    level: DEBUG 
    handlers: [plain_handler] 
    propagate: no 
    Error_Logger: 
    level: WARNING 
    handlers: [errfile_handler,console_error_handler,logfile_handler] 
    propagate: no 
root: 
    level: INFO 
    handlers: [console_default_handler] 
+0

你的yamls有什麼?我敢打賭,加載的字典都默認修改根記錄器,因爲他們沒有另外指定。 –

+0

這是其中之一:見上面 – Nupur

回答

1

logging之一不支持您想在這裏使用模式。默認情況下,重新運行logging.config.dictConfig()會吹走所有現有的記錄器,處理程序和格式化程序。配置字典中有incrementaldisable_existing_loggers選項可供使用,但使用incremental時,無法加載新的處理程序或格式化程序。您需要將您的配置合併到整個程序的單個文件中,或者使用模塊中提供的機制手動構建和添加格式器和處理程序到記錄器。

+0

非常感謝!我無法找到有關增量的很多信息。如果你有任何鏈接,你會發布他們嗎?謝謝 – Nupur

+0

我主要只是看了日誌模塊中的代碼,但http://docs.python.org/2/library/logging.config.html#incremental-configuration –

+0

哦,你看了看代碼本身。因爲那段話不多說...我的意思是它更像是一個抽象的評論 – Nupur