Python 小模組學習 logging

2021-07-10 23:35:38 字數 4759 閱讀 4982

**:

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

import

logging

logging

.basicconfig

(filename =os

.path

.join(os

.getcwd

(),'log.txt'

),level

=logging

.debug

)logging

.debug

('this is a message'

)

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

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

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

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

formatter:日誌的格式化;

在記錄日誌時, 日誌訊息都會關聯乙個級別(「級別」本質上是乙個非負整數)。系統預設提供了6個級別,它們分別是:

級別對應的值

critical

50error

40warning

30info

20debug

10notset0

可以給日誌物件(logger instance)設定日誌級別,低於該級別的日誌訊息將會被忽略,也可以給hanlder設定日誌級別,對於低於該級別的日誌訊息, handler也會忽略。

logging模組中的常用函式:

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

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

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

format :設定日誌輸出格式;

datefmt :定義日期格式;

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

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

下面是乙個簡單的例子:

#coding=gbk  

import

logging

logging

.basicconfig

(filename =os

.path

.join(os

.getcwd

(),'log.txt'),\

level

=logging

.warn

,filemode

='w'

,format

='%(asctime)s - %(levelname)s: %(message)s'

)logging

.debug

('debug'

)#被忽略

logging

.info

('info'

)#被忽略

logging

.warning

('warn'

)logging

.error

('error'

)#----- 結果

#2009-07-13 21:42:15,592 - warning: warn

#2009-07-13 21:42:15,640 - error: error

建立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.logger類。

獲取日誌級別對應的名稱。例如:

print

logging

.getlevelname

(logging

.notset

)print

logging

.getlevelname(10

)#logging.debug

print

logging

.getlevelname

(logging

.debug

)print

logging

.getlevelname(30

)#logging.warn

print

logging

.getlevelname

(logging

.error

)print

logging

.getlevelname(50

)#logging.critical

當不再使用日誌系統的時候,呼叫該方法,它會將日誌flush到對應的目標域上。一般在系統退出的時候呼叫。

logger物件 通過呼叫logging.getlogger(name)來建立,它有如下常用的方法和屬性:

設定日誌的級別。對於低於該級別的日誌訊息將被忽略。下面乙個例子演示setlevel方法:

#coding=gbk  

import

logging

logging

.basicconfig

(filename =os

.path

.join(os

.getcwd

(),'log.txt'

),level

=logging

.debug

)log

=logging

.getlogger

('root.test'

)log

.setlevel

(logging

.warn

)#日誌記錄級別為warnning

log.

info

('info'

)#不會被記錄

log.

debug

('debug'

)#不會被記錄

log.

warning

('warnning'

)log

.error

('error'

)

記錄debug級別的日誌資訊。引數msg是資訊的格式,args與kwargs分別是格式引數。

import

logging

logging

.basicconfig

(filename =os

.path

.join(os

.getcwd

(),'log.txt'

),level

=logging

.debug

)log

=logging

.getlogger

('root'

)log

.debug

('%s, %s, %s',*(

'error'

,'debug'

,'info'

))log

.debug

('%(module)s, %(info)s',)

記錄相應級別的日誌資訊。引數的含義與logger.debug一樣。

記錄日誌,引數lvl使用者設定日誌資訊的級別。引數msg, *args, **kwargs的含義與logger.debug一樣。

以error級別記錄日誌訊息,異常跟蹤資訊將被自動新增到日誌訊息裡。logger.exception通過用在異常處理塊中,如:

import

logging

logging

.basicconfig

(filename =os

.path

.join(os

.getcwd

(),'log.txt'

),level

=logging

.debug

)log

=logging

.getlogger

('root'

)try

:raise

exception

,'this is a exception'

except

:log

.exception

('exception'

)#異常資訊被自動新增到日誌訊息中

新增/移除日誌訊息過濾器。在講述filter時具體介紹。

新增/移除日誌訊息處理器。在講述handler時具體介紹。

建立logrecord物件。日誌訊息被例項為乙個logrecord物件,並在日誌類內處理。

Python學習日記 B站小甲魚 模組

模組是更高階的封裝 容器 資料的封裝 函式 語句的封裝 類 方法和屬性的封裝 模組 模組就是程式 匯入模組的幾個方法 import 模組名 from 模組名 import 函式名 import 函式名 as 簡寫 if name main 在模組裡作為測試用,如果模組作為主函式則執行,如果模組作為模...

python小筆記 os模組

os 包含了普遍作業系統的功能 獲取作業系統型別的功能 eg import os print os.name 返回nt windows作業系統 若返回posix,則是linux unix mac os操作 獲取作業系統詳細的資訊 windows不支援,會報錯 eg import os print o...

python學習(模組)

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