2016-01-01 105 views
0

我有一個python 主要哪些用戶各種子模塊。 結構是這樣的:Python日誌記錄 - 排除子模塊

root:. 
│ main.py 
│ 
└───MyModule 
     file1.py 
     file2.py 
     special.py 

MyModule的輸出一些重要的日誌(每個文件執行記錄器= logging.getLogger(名稱))。但是 - 「special.py」日誌需要單獨存儲。

我嘗試:

MyModuleHandler = logging.handlers.RotatingFileHandler('MyModule.log', maxBytes= 5000000, backupCount=5) 
MyModuleHandler.setFormatter(formatter) 
MyModuleHandler.setLevel(logging.DEBUG) 


specialHandler = logging.handlers.RotatingFileHandler('special.log', maxBytes= 5000000, backupCount=5) 
specialHandler.setFormatter(formatter) 
specialHandler.setLevel(logging.INFO) 

console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
console.setFormatter(formatter) 

logging.getLogger('MyModule.special').setLevel(logging.DEBUG) 
logging.getLogger('MyModule.special').addHandler(specialHandler) 

logging.getLogger('MyModule').addHandler(console) 
logging.getLogger('MyModule').setLevel(logging.DEBUG) 
logging.getLogger('MyModule').addHandler(MyModuleHandler) 

傢伙,我究竟做錯了什麼?

回答

1

好的。 這真的很無聊 我只需要在指定的記錄器中設置傳播字段。

正確的代碼應該是:

MyModuleHandler = logging.handlers.RotatingFileHandler('MyModule.log', maxBytes= 5000000, backupCount=5) 
MyModuleHandler.setFormatter(formatter) 
MyModuleHandler.setLevel(logging.DEBUG) 


specialHandler = logging.handlers.RotatingFileHandler('special.log', maxBytes= 5000000, backupCount=5) 
specialHandler.setFormatter(formatter) 
specialHandler.setLevel(logging.INFO) 

console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
console.setFormatter(formatter) 

logging.getLogger('MyModule.special').setLevel(logging.DEBUG) 
logging.getLogger('MyModule.special').addHandler(specialHandler) 
logging.getLogger('MyModule.special').propagate = False 

logging.getLogger('MyModule').addHandler(console) 
logging.getLogger('MyModule').setLevel(logging.DEBUG) 
logging.getLogger('MyModule').addHandler(MyModuleHandler) 
相關問題