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...