python中的logging模組學習

來源:互聯網
上載者:User

標籤:相關   tco   ati   png   col   一個   設定   class   替換   

Python的logging模組Logging的基本資料:

l  預設的情況下python的logging模組列印到控制台,只顯示大於等於warning層級的日誌

l  記錄層級:critical > error > warning > info > debug > notset

Logging的基本組件:1.   logger

l  logger是一個樹形層級結構,輸出資訊之前都要獲得一個logger

l  logger = logging.getLogger() 返回一個預設的logger也即rootLogger,並應用預設的記錄層級,即只有日誌等級大於等於warning層級的資訊輸出

l  也可以通過logger.setLevel(lel)指定最低的記錄層級,可用的記錄層級有:

l  logging.DEBUG,logging.INFO,Logging.ERROR,logging.CRITICAL;logger.debug(),logger.info().logger.warning(),logger.error(),logger.critical()

2.   handler

l  handler對象負責發送相關的資訊到指定目的地

l  handler.setlevel(lel):指定記錄層級,低於lel層級的日誌將被忽略

l  handler.setFormatter():給handler選擇一個Formatter

l  logging.StreamHandler 可以向類似與sys.stdout或者sys.stderr的任何檔案對象(file object)輸出資訊

l  logging.FileHander 用於向一個檔案輸出日誌資訊

l  logging.handlers.RotatingFileHandler 類似於上面的FileHandler,但是它可以管理檔案大小,當檔案達到一定大小之後,它會自動將當前記錄檔改名,然後建立一個新的同名記錄檔繼續輸出

l  logging.handlers.TimeRotatingFileHandler和RotatingFileHandler類似,不過它沒有通過判斷檔案大小來決定何時重新建立記錄檔,而是間隔一定時間就自動建立新的記錄檔

Formatter

l  formatter對象設定日誌資訊最後的規則,結構和內容,預設的時間格式為%Y-%m-%d %H:%M:%S

Filter

l  filter:限制只有滿足過濾規則的日誌才會輸出

l  比如定義了filter = logging.Filter(‘jiyanjiao’),並將這個Filter添加到一個Handler上,則使用該handler的Logger中只有名字帶’jiyanjiao’首碼的logger才能輸出其日誌

下面就來說一下具體的應用吧

l  需求是這樣的:想列印自己的log,因為使用print每次都需要編輯替換覺得很麻煩,想讓自己的程式更加正規些,也想區分不同層級log的顏色所以寫下了如下的代碼

import loggingimport ctypes‘‘‘ 定義顏色記錄層級顏色變數: ‘‘‘FOREGROUND_WHITE = 0x0007FOREGROUND_BLUE = 0x01FOREGROUND_GREEN = 0x02FOREGROUND_RED = 0x04FOREGROUND_YELLOW = FOREGROUND_RED | FOREGROUND_GREENSTD_OUTPUT_HANDLE = -11std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)def set_color(color, handle=std_out_handle):    bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)    return boolclass mylogger(object):    def __init__(self,name=‘mylogger‘):        self.logger = logging.getLogger(name)        self.init_logger()    ‘‘‘    建立一個file_handler,用於寫入記錄檔    再建立一個stream_handler,用於輸出到控制台    定義handler的輸出格式formatter        %(asctime)s   字串形式的目前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒        %(name)s      Logger的名字        %(levelname)s  文本形式的記錄層級        %(message)s    使用者輸出的訊息    ‘‘‘    def init_logger(self):        self.logger.setLevel(logging.DEBUG)        file_handler = logging.FileHandler(‘D:/tmp/test.log‘)        stream_handler = logging.StreamHandler()        formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)        file_handler.setFormatter(formatter)        stream_handler.setFormatter(formatter)        self.logger.addHandler(file_handler)        self.logger.addHandler(stream_handler)    def debug(self,message,color=FOREGROUND_BLUE):        set_color(color)        self.logger.debug(message)        set_color(FOREGROUND_WHITE)    def info(self, message, color=FOREGROUND_GREEN):        set_color(color)        self.logger.info(message)        set_color(FOREGROUND_WHITE)    def warn(self,message,color=FOREGROUND_YELLOW):        set_color(color)        self.logger.warn(message)        set_color(FOREGROUND_WHITE)    def error(self, message,color=FOREGROUND_RED):        set_color(color)        self.logger.error(message)        set_color(FOREGROUND_WHITE)    def critical(self,message,color=FOREGROUND_RED):        set_color(color)        self.logger.critical(message)        set_color(FOREGROUND_WHITE)if __name__ == ‘__main__‘:    mylogger = mylogger()    mylogger.debug(‘這是debug資訊‘)    mylogger.info(‘這是info資訊‘)    mylogger.warn(‘這是warning‘)    mylogger.error(‘這是error資訊‘)    mylogger.critical(‘這是critical資訊‘)
列印的結果:

那麼可能有同學就有疑問了那麼ctypes是什麼

l  Ctypes是python的一個外部庫,提供和c語言相容的資料類型,可以很方便的調用C DLL中的函數

python中的logging模組學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.