python中的logging模組學習

2022-04-09 22:58:07 字數 3988 閱讀 1625

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

l  日誌級別:critical > error > warning > info > debug > notset

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

logging

import

ctypes

'''定義顏色日誌級別顏色變數:

'''foreground_white = 0x0007foreground_blue = 0x01foreground_green = 0x02foreground_red = 0x04foreground_yellow = foreground_red |foreground_green

std_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

bool

class

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的使用

我們先來看一下函式式簡單配置 預設情況下python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於warning級別的日誌,這說明預設的日誌級別設定為warning 日誌級別等級critical error warning info debug 預設的日誌格式為日誌級別 logge...

python中的logging模組

一 python中的logging模組提供了日誌的介面,過它儲存各種格式的日誌 日誌的等級分為以下幾種,日誌的等級按照以下順序依次提高,debug info warning error critical 但是日誌的資訊量是依次減少的,當指定乙個日誌級別之後,會記錄大於或等於這個日誌級別的日誌資訊,小...

Python中logging例項講解

logging 的基本用法網上很多,這裡就不介紹了。在引入正文之前,先來看乙個需求 假設需要將某功能封裝成類庫供他人使用,如何處理類庫中的日誌?數年前在乙個 c 開發的專案中,我用程式設計客棧了這樣的方法 定義乙個 logging 基類,所有需要用到日誌的類都繼承這個基類,這個基類中定義乙個 log...