Logging模塊知識點:python
一.分爲5個級別:debug(),info(),warning(),error(),critical()。級別由低到高web
1.1最簡單的用法:debug
1.2 若是想把日誌寫到文件裏:logging.basicConfig()方法3d
whw.log文件裏的內容爲:日誌
注意後面那句level=’logging.INFO’的意思是把日誌的記錄級別設置爲INFO,也就是說,只有日誌是INFO或者比INFO級別高的日誌纔會被記錄到文件裏面。如上面的例子中debug的級別低於info因此whw.log日誌文件裏不會記錄logging.debug()方法中的信息。若是但願記錄debug的日誌,只要將級別設置爲DEBUG就能夠了。orm
注意若是不設置日誌級別,那麼默認的日誌級別是warning。對象
二.自定義日誌格式blog
1.日誌中增長時間信息:接口
whw.log文件中的內容爲:(運行2次的結果)get
除了加時間還能夠定義一大堆格式,以下表所示:
三.日誌同時輸出到屏幕和文件
1.python使用logging模塊記錄日誌涉及4個主要的類:
(1)logger:提供了應用程序能夠直接使用的接口;
(2)handler:將(logger建立的)日誌記錄發送到合適的目的輸出;
(3)filter:提供了細度設備來決定輸出那條日誌記錄;(用的很少)
(4)formatter:決定日誌記錄的最終輸出格式。
例一:同時輸出到文件與屏幕(含filter過濾)
import logging class IgnoreBackupLogFilter(logging.Filter): """忽略帶db backup 的日誌""" def filter(self, record): #固定寫法 return "db backup" not in record.getMessage() #1.生成logger對象############################################# whw_logger = logging.getLogger('whw_web') #設置日誌級別(這裏是全局的)全局的默認級別爲warning whw_logger.setLevel(logging.DEBUG) #1.1 把filter對象添加到logger中就能夠支持過濾 whw_logger.addFilter(IgnoreBackupLogFilter()) #注意,若是全局設置爲DEBUG,console handler設置爲INFO,若是輸出日誌級別爲debug,那就不會在日誌中打印 #全局先過濾一遍 #2.生成handler對象############################################## whw_co = logging.StreamHandler()#屏幕~~~ #能夠在handler中設置級別:控制屏幕的不一樣的日誌級別與輸出 whw_co.setLevel(logging.WARNING) whw_fh = logging.FileHandler('whw_web.log')#文件~~~ #能夠在handler中設置級別:控制文件的不一樣的日誌級別與輸出 whw_fh.setLevel(logging.ERROR) #2.1 把handler對象綁定到logger對象中 whw_logger.addHandler(whw_co) whw_logger.addHandler(whw_fh) #3.生成formatter對象############################################ #文件 file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #屏幕 console_formatter = logging.Formatter('%(asctime)s - %(name)s -%(lineno)s- %(levelname)s - %(message)s') #3.1 把formatter對象綁定到handler對象中 #屏幕+文件 whw_co.setFormatter(console_formatter) whw_fh.setFormatter(file_formatter) #########輸出日誌################################################# whw_logger.debug('whwhwhwhwh,db backup') whw_logger.info('whwhwhwhwh,db backup') whw_logger.warning('whwhwhwhwh,db backup') whw_logger.error('whwhwhwhwh')
例一的輸出結果爲:
例二:日誌的自動截斷
import logging from logging import handlers whw_logger = logging.getLogger(__name__) log_file = "whw_log.log" fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) #也可:fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3) formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s') fh.setFormatter(formatter) whw_logger.addHandler(fh) whw_logger.warning('whehejwwj') whw_logger.warning('kjdswewi') whw_logger.error('wwhwwl')
例二的運行結果以下: