Python模組學習 logging 日誌記錄

2021-08-09 06:28:49 字數 2959 閱讀 5468

python的logging模組提供了記錄程式運**況的日誌功能,類似於apache的log4j

許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.net平台中,有非常著名的第三方開源日誌元件log4net,c++中,有人們熟悉的log4cpp,而在python中,我們不需要第三方的日誌元件,因為它已經為我們提供了簡單易用、且功能強大的日誌模組:logging。logging模組支援將日誌資訊儲存到不同的目標域中,如:儲存到日誌檔案中;以郵件的形式傳送日誌資訊;以http get或post的方式提交日誌到web伺服器;以windows事件的形式記錄等等。這些日誌儲存方式可以組合使用,每種方式可以設定自己的日誌級別以及日誌格式。日誌模組的內容比較多,今天先學習logging模組的基本使用,下次具體學習日誌的處理。

先看乙個比較簡單的例子,讓我們對logging模組有個感性的認識:

python

import logging

logging.basicconfig(filename = os.path.join(os.getcwd(), 『log.txt』), level = logging.debug)

logging.debug(『this is a message』)

import logging

logging.basicconfig(filename = os.path.join(os.getcwd(), 『log.txt』), level = logging.debug)

logging.debug(『this is a message』)

執行上面例子的**,將會在程式的根目錄下建立乙個log.txt檔案,開啟該檔案,裡面有一條日誌記錄。

4個主要的元件

logger: 日誌類,應用程式往往通過呼叫它提供的api來記錄日誌;

handler: 對日誌資訊處理,可以將日誌傳送(儲存)到不同的目標域中;

filter: 對日誌資訊進行過濾;

formatter:日誌的格式化;

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。可能沒有

logging模組中的常用函式:

logging.basicconfig([**kwargs]):

為日誌模組配置基本資訊。kwargs 支援如下幾個關鍵字引數:

filename :日誌檔案的儲存路徑。如果配置了些引數,將自動建立乙個filehandler作為handler;

filemode :日誌檔案的開啟模式。 預設值為』a』,表示日誌訊息以追加的形式新增到日誌檔案中。如果設為』w』, 那麼每次程式啟動的時候都會建立乙個新的日誌檔案;

format :設定日誌輸出格式;

datefmt :定義日期格式;

level :設定日誌的級別.對低於該級別的日誌訊息將被忽略;

stream :設定特定的流用於初始化streamhandler;

logging.getlogger([name])

建立logger物件。日誌記錄的工作主要由logger物件來完成。在呼叫getlogger時要提供logger的名稱(注:多次使用相同名稱來呼叫getlogger,返回的是同乙個物件的引用。),logger例項之間有層次關係,這些關係通過logger名稱來體現,如:

p = logging.getlogger(「root」)

c1 = logging.getlogger(「root.c1」)

c2 = logging.getlogger(「root.c2」)

例子中,p是父logger, c1,c2分別是p的子logger。c1, c2將繼承p的設定。如果省略了name引數, getlogger將返回日誌物件層次關係中的根logger。

logging.setloggerclass(klass)

logging.getloggerclass()

獲取/設定日誌型別。使用者可以自定義日誌類來代替系統提供的logging.logger類。

PythonStudy 日誌模組 logging

日誌 日之石日常的流水,將程式執行過程中的狀態或資料盡心記錄,一般是記錄到日誌檔案當中的。在正常的專案之中,專案的執行的一些列印資訊,採用logging列印到檔案當中,這個過程就稱作為 日誌記錄模組 以下為預設的操作日誌模組 匯入日誌模組 import logging logging為預設列印者,是...

python學習(模組)

模組搜尋路徑 匯入乙個叫 spam 的模組時,直譯器先在當前目錄中搜尋名為 spam.py 的檔案,然後在環境變數 pythonpath 指琮的目錄列表中搜尋,然後是環境變數 path 中的路徑列表。如果 pythonpath 沒有設定,或者檔案沒有找到,接下來搜尋安裝目錄,在 unix 中,通常是...

python 模組學習

一 from django.contrib.auth.hashers import make password 通過函式名即可發現,主要有兩個函式,分別是建立密碼和驗證 用法ps 123456 dj ps make password ps,none,pbkdf2 sha256 建立django密碼,...