logging模塊知識點及應用小結

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')

例二的運行結果以下:

相關文章
相關標籤/搜索