許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.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...