詳解Python中的日誌模組logging

2022-10-04 22:30:40 字數 4485 閱讀 4835

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

先看乙個比較簡單的例子,讓我們對logg程式設計客棧ing模組有個感性的認識:

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」。

4個主要的元件

日誌級別

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

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

logging模組中的常用函式:

logging程式設計客棧.basicconfig([**kwargs]):

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

下面是乙個簡單的例子:

#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

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類。

logging.getlevelname(lvl)

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

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

logging.shutdown()

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

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

logger.setlevel(lvl):

設定日誌的級別。對於低於該級別的日誌訊息將被忽略。下面乙個例子演示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('errwww.cppcns.comor')

logger.debug(msg [ ,*args [, **kwargs]])

記錄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.info(msg[ , *args[ , **kwargs] ] )

logger.warnning(msg[ , *args[ , **kwargs] ] )

logger.error(msg[ , *args[ , **kwargs] ] )

logger.critical(msg[ , *args[ , **kwargs] ] )

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

logger.log(lvl, msg[ , *args[ , **kwargs] ] )

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

logger.exception(msg[, *args])

以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')

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

logger.addfilter(filt)

logger.removefilter(filt)

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

logger.addhandler(hdlr)

logger.removehandler(hdlr)

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

logger.makerecord(name, lvl, fn, lno, msg, args, exc_info[, func, extra])

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

本文標題: 詳解python中的日誌模組logging

本文位址: /jiaoben/python/126769.html

詳解 Python 中的模組

python 模組是 個包含有函式 變數 類和常量等等內容的 python 件。模組幫助我們將相關的 組織在 起,例如 math 模組擁有數學相關的函式。import mymodule print mymodule.foo mymodule.hello 上述 的運 結果如下 100 i am fro...

python的日誌模組

date 2019 06 28 autor wangxc 功能 1.寫日誌功能,當沒有傳入日誌寫入路徑時,他會將 本檔名.log 的日誌檔案存放到指令碼同路徑下 例子 指令碼路徑在c logger.py,那麼生成的日誌檔案logger.log將會在c 下存在 2.可以傳入日誌的級別,控制日誌輸出的形...

Python中的xlrd模組詳解

1 匯入模組 import xlrd2 開啟excel檔案讀取資料 data xlrd.open workbook filename 檔名以及路徑,如果檔名或者路徑中有中文,在前面加乙個r3 常用的函式 excel中最重要的方法就是對book和sheet的操作 a 獲取book中所有工作表的名字 n...