2012-12-10 44 views
3

我想創建像info.log建立,蟒的debug.log分開記錄文件,error.log中我有用於記錄的設置文件(logging.conf)下面記錄在python

[loggers] 
keys=root,simpleExample 

[handlers] 
keys=consoleHandler 

[formatters] 
keys=simpleFormatter 

[logger_root] 
level=DEBUG 
handlers=consoleHandler 

[logger_simpleExample] 
level=DEBUG 
handlers=consoleHandler 
qualname=simpleExample 
propagate=0 

[handler_consoleHandler] 
class=StreamHandler 
level=DEBUG 
formatter=simpleFormatter 
args=(sys.stdout,) 

[formatter_simpleFormatter] 
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 
datefmt= 

和給出我創建logging.py文件下

import logging 
import logging.config 

logging.config.fileConfig('logging.conf') 

# create logger 
logger = logging.getLogger('simpleExample') 

# 'application' code 
logger.debug('debug message') 
logger.info('info message') 
logger.warn('warn message') 
logger.error('error message') 
logger.critical('critical message') 

給出但當執行logging.py文件我得到以下結果CONSOL

2012-12-10 13:30:20,030 - simpleExample - DEBUG - debug message 
2012-12-10 13:30:20,031 - simpleExample - INFO - info message 
2012-12-10 13:30:20,032 - simpleExample - WARNING - warn message 
2012-12-10 13:30:20,032 - simpleExample - ERROR - error message 
2012-12-10 13:30:20,033 - simpleExample - CRITICAL - critical message 

正如我所說的,我想在log.info,debug.info,error.info中創建單獨的文件。 在此先感謝

+0

這需要一個具有最小和最大日誌級別的* custom *處理程序。通常只有最低等級(內部是數字)。 –

+0

我不知道在logging.conf文件中創建自定義處理程序,你可以給任何鏈接或參考,這將幫助我。 – Satyendra

+0

這不是一件容易的事情,我只能指出你真的在'logging'模塊文檔中。我會重新思考爲什麼你想要首先有單獨的文件。 –

回答

5

您需要配置多個處理程序輸出不同的級別日誌到不同的文件。例如,你想INFO級別的日誌info.log建立,您可以定義信息的FileHandler濾波器

class MyFilter(logging.Filter): 
    def filter(self, rec): 
     return rec.levelno == logging.INFO 

class MyHandler(logging.FileHandler): 
    def __init__(self, *arg, **kw): 
     logging.FileHandler.__init__(self, *arg, **kw) 
     self.addFilter(MyFilter()) 

並將其添加到日誌命名空間:

logging.MyHandler = MyHandler 

,所以你可以使用它你配置文件:

[handlers] 
keys=consoleHandler,onlyinfoHandler 
[handler_onlyinfoHandler] 
class=MyHandler 
level=DEBUG 
formatter=simpleFormatter 
args=('info.log','w') 

您可以繼續添加其他人或使用級別作爲處理程序參數。