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密碼,...