Python logging日誌管理
阿新 • • 發佈:2022-01-14
import logging logger = logging.getLogger("simple_example") logger.setLevel(logging.DEBUG) # 建立一個filehandler來把日誌記錄在檔案裡,級別為debug以上 fh = logging.FileHandler("spam.log") fh.setLevel(logging.DEBUG) # 建立一個streamhandler來把日誌打在CMD視窗上,級別為error以上 ch = logging.StreamHandler() ch.setLevel(logging.ERROR) # 設定日誌格式formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) fh.setFormatter(formatter) #將相應的handler新增在logger物件中 logger.addHandler(ch) logger.addHandler(fh) # 開始打日誌 logger.debug("debug message") logger.info("info message") logger.warn("warn message") logger.error("error message") logger.critical("critical message")
logging模組簡介 Python的logging模組提供了通用的日誌系統,可以方便第三方模組或者是應用使用。這個模組提供不同的日誌級別,並可以採用不同的方式記錄日誌,比如檔案,HTTP GET/POST,SMTP,Socket等,甚至可以自己實現具體的日誌記錄方式。 logging模組與log4j的機制是一樣的,只是具體的實現細節不同。模組提供logger,handler,filter,formatter。 logger:提供日誌介面,供應用程式碼使用。logger最長用的操作有兩類:配置和傳送日誌訊息。可以通過logging.getLogger(name)獲取logger物件,如果不指定name則返回root物件,多次使用相同的name呼叫getLogger方法返回同一個logger物件。 handler:將日誌記錄(log record)傳送到合適的目的地(destination),比如檔案,socket等。一個logger物件可以通過addHandler方法新增0到多個handler,每個handler又可以定義不同日誌級別,以實現日誌分級過濾顯示。 filter:提供一種優雅的方式決定一個日誌記錄是否傳送到handler。 formatter:指定日誌記錄輸出的具體格式。formatter的構造方法需要兩個引數:訊息的格式字串和日期字串,這兩個引數都是可選的。 與log4j類似,logger,handler和日誌訊息的呼叫可以有具體的日誌級別(Level),只有在日誌訊息的級別大於logger和handler的級別。 logging用法解析1. 初始化 logger = logging.getLogger("endlesscode"),getLogger()方法後面最好加上所要日誌記錄的模組名字,後面的日誌格式中的%(name)s 對應的是這裡的模組名字 2. 設定級別 logger.setLevel(logging.DEBUG),Logging中有NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL這幾種級別,日誌會記錄設定級別以上的日誌 3. Handler,常用的是StreamHandler和FileHandler,windows下你可以簡單理解為一個是console和檔案日誌,一個列印在CMD視窗上,一個記錄在一個檔案上 4. formatter,定義了最終log資訊的順序,結構和內容,我喜歡用這樣的格式 '[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S', %(name)s Logger的名字 %(levelname)s 文字形式的日誌級別 %(message)s 使用者輸出的訊息 %(asctime)s 字串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒 %(levelno)s 數字形式的日誌級別 %(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有 %(filename)s 呼叫日誌輸出函式的模組的檔名 %(module)s 呼叫日誌輸出函式的模組名 %(funcName)s 呼叫日誌輸出函式的函式名 %(lineno)d 呼叫日誌輸出函式的語句所在的程式碼行 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示 %(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數 %(thread)d 執行緒ID。可能沒有 %(threadName)s 執行緒名。可能沒有 %(process)d 程序ID。可能沒有 5. 記錄 使用object.debug(message)來記錄日誌