許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。
在.net平台中,有非常著名的第三方開源日誌元件log4net,c++中,有人們熟悉的log4cpp。
而在python中,我們不需要第三方的日誌元件,因為它已經為我們提供了簡單易用、且功能強大的日誌模組:logging。
logging模組支援將日誌資訊儲存到不同的目標域中,如:儲存到日誌檔案中;以郵件的形式傳送日誌資訊;以http get或post的方式提交日誌到web伺服器;以windows事件的形式記錄等等。這些日誌儲存方式可以組合使用,每種方式可以設定自己的日誌級別以及日誌格式。
16.7.logging.config
— logging configuration
16.7.3. configuration file format
16.8.logging.handlers
— logging handlers
皮皮blog
logging模組的基本使用
logging使用的基本格式如下
簡單例子1import
logging
logging
.basicconfig
(format='
%(asctime)s
: %(levelname)s
: %(message)s',
level
=logging
.info
)
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
10notset
0可以給日誌物件(logger instance)設定日誌級別,低於該級別的日誌訊息將會被忽略,也可以給hanlder設定日誌級別,對於低於該級別的日誌訊息, handler也會忽略。
皮皮blog
logging模組中的常用函式
為日誌模組配置基本資訊。
kwargs 支援如下幾個關鍵字引數
filename:日誌檔案的儲存路徑。如果配置了些引數,將自動建立乙個filehandler作為handler;
filemode:日誌檔案的開啟模式。 預設值為'a',表示日誌訊息以追加的形式新增到日誌檔案中。如果設為'w', 那麼每次程式啟動的時候都會建立乙個新的日誌檔案;
format:設定日誌輸出格式;
datefmt:定義日期格式;
level:設定日誌的級別,對低於該級別的日誌訊息將被忽略;
stream:設定特定的流用於初始化streamhandler;
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")
note:
1. p是父logger, c1,c2分別是p的子logger。c1, c2將繼承p的設定。
2. 如果省略了name引數, getlogger將返回日誌物件層次關係中的根logger。
獲取/設定日誌型別。使用者可以自定義日誌類來代替系統提供的logging.logger類。
獲取日誌級別對應的名稱。
logging.shutdown()
當不再使用日誌系統的時候,呼叫該方法,它會將日誌flush到對應的目標域上。一般在系統退出的時候呼叫。
皮皮blog
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') #異常資訊被自動新增到日誌訊息中
logger.addfilter(filt)
新增/移除日誌訊息過濾器。
新增/移除日誌訊息處理器。
建立logrecord物件。日誌訊息被例項為乙個logrecord物件,並在日誌類內處理。
[python模組學習 ---- logging 日誌記錄(一)
]from:
VC作業系統服務
需要包含標頭檔案 include 連線scm sc handle hsc openscmanager null,null,sc manager all access if hsc null return service status tyds sc handle scserv print spool...
通用作業系統服務
os 微型計算機作業系統介面 io 流的核心工具 time 時間的獲得和轉換 argparse 解析命令列的選項 引數和子命令 optparse 解析命令列的選項 getopt 解析c風格的命令列選項 logging日誌 logging.config logging.handlers getpass...
logging日誌簡單操作與解析
logging用於生成日誌 1.logging.getlogger 用於生成資料 生成器 2.logging.basicconfig 生成乙個與根生成器相連的streamhandler,stream sys.stdout將生成器產生的資訊顯示在螢幕上 3.logging.filehandler 生成...