Python標準庫 - logging模塊 學習日志

描述

環(huán)境: python3.x
源碼: /Lib/logging/init.py

python提供了logging模塊乾忱,用于記錄程序運行過程中的一些關鍵信息掀虎,以便于對程序的運行狀況進行跟蹤辜荠。
logging模塊簡單易用且功能強大。該模塊支持將日志信息保存在不同的地方,如:日志文件叽躯、Windows事件再扭、郵件氧苍、http請求等。由于logging模塊內容較多泛范,無法詳細記錄让虐,更多內容請查看官方文檔

模塊介紹

Logging.Logger

用于記錄日志

logger類不直接實例化,但是需要通過函數(shù)logging.getLogger(name)獲取罢荡。相同的name將會返回相同Logger實例的引用赡突。
name是一個點分字符串,如

foo
foo.bar
foo.bam
foo.bar.baz
...

foo.bar foo.bam foo.bar.baz都是foo后裔
同理foo.bar.bazfoo.bar的后裔
如果直接使用logging.debug()等方法区赵,則默認使用name為root的logger惭缰。

配置

Logger.propagate 指定了日志的傳播性。當值為true時笼才,日志將會傳播給祖先logger漱受。當值為false時,日志將不向上傳播骡送。
Logger.setLevel(lvl) 指定了日志的等級昂羡,等級值小于lvl的日志將會被忽略。給handler設置日志等級也可以實現(xiàn)該效果摔踱。

等級
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

Logger.getChild(suffix) 獲取子日志實例虐先,``logging.getLogger('abc').getChild('def.ghi')相同于logging.getLogger('abc.def.ghi')`

Logger.addHandler(hdlr)Logger.removeHandler(hdlr) 為logger增刪Handler。
Logger.addFilter(filt)Logger.removeFilter(filt) 為logger增刪Filter派敷。

日志方法

基本用法

Logger.debug(msg, *args, **kwargs)
Logger.info(msg, *args, **kwargs)
Logger.warning(msg, *args, **kwargs)
Logger.error(msg, *args, **kwargs)
Logger.critical(msg, *args, **kwargs)
Logger.log(lvl, msg, *args, **kwargs)
Logger.exception(msg, *args, **kwargs)

# example
logging.basicConfig(level=logging.DEBUG)
logging.debug('log debug')
logging.info('log info')
logging.warning('log warning')
logging.error('log error')
logging.critical('log critical')
logging.shutdown() # 應該在應用程序退出時調用

復雜用法

logging.basicConfig(format='[%(asctime)s] %(message)s, %(user)s => %(pwd)s', datefmt='%Y-%m-%d %H:%M:%S')
extra = {'user': 'admin', 'pwd': '123456'}
logging.warning('login failed: %s', 'wrong password', extra=extra)

# [2017-07-21 13:19:31] login failed: wrong password, admin => 123456

注:logging.basicConfig方法需要在輸出日志前調用蛹批,否則無法生效撰洗。

Logging.Handler

用于處理日志,將適當?shù)娜罩颈4娴街付ㄎ恢?/p>

配置

handler.setLevel()方法與logger中一樣腐芍,指定將發(fā)送到適當目標的最低嚴重性差导。為什么有兩種setLevel()方法?logger中設置的級別決定了將其傳遞給其handler的消息的嚴重程度甸赃。每個handler中設置的級別決定自身將發(fā)送哪些消息柿汛。
handler.setFormatter() 為handler設置Formatter。
handler.addFilter()handler.removeFilter()為handler增刪Filter埠对。

使用方法

Logging.Handler是一個基類络断,用于定義接口,因此不應該被實例化项玛。需要建立子類并實現(xiàn)接口貌笨。
常見的子類:

子類 描述
StreamHandler 發(fā)送日志信息到stream
FileHandler 發(fā)送日志信息到文件
SMTPHandler 發(fā)送日志信息到郵箱
HTTPHandler 使用get或post發(fā)送日志信息到http服務器

Logging.Formatter

用于日志的格式化

使用方法

# 創(chuàng)建logger并設置日志級別
logger = logging.getLogger('test')
logger.setLevel(logging.DEBUG)

# 創(chuàng)建handler并設置日志級別
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)

# 創(chuàng)建formatter并添加至handler
formatter = logging.Formatter(fmt='[%(asctime)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)

# 將handler添加至logger
logger.addHandler(handler)

# 使用logger
logger.debug('log debug')

# [2017-07-22 09:10:07] log debug

模塊級函數(shù)

logging.getLogger(name=None)獲取指定name的logger實例,當name=None時襟沮,返回name為root的logger實例锥惋。
logging.getLoggerClass()獲取logger的類,一般用于子類的繼承开伏。
logging.basicConfig(**kwargs)對日志系統(tǒng)進行基礎的配置膀跌,該函數(shù)會根據(jù)args為root logger創(chuàng)建StreamHandler和默認的Formatter,以下為logging.basicConfig(**kwargs)參數(shù)的描述:

參數(shù) 描述
filename 指定一個文件名來創(chuàng)建FileHandler固灵,這將取代默認的StreamHandler
filemode 如果文件名已指定捅伤,改參數(shù)將指定文件打開方式,默認‘a(chǎn)’
format 為handler指定字符串格式
datefmt 指定時間/日期格式
style 3.2版本加入巫玻,如果format已指定丛忆,改參數(shù)將修改格式串的風格,默認‘%’
level 為root logger指定日志等級
stream 指定流來初始化StreamHandler仍秤。改參數(shù)與filename參數(shù)無法兼容熄诡,否則將會報錯ValueError
handlers 3.3版本加入,為root logger指定Handler诗力,如果format沒有指定將會使用默認formatter凰浮。改參數(shù)與filename、stream不兼容苇本,否則將會報錯ValueError

線程安全

logging模塊是線程安全的导坟。它通過使用線程鎖實現(xiàn)這一點;有一個鎖來序列化訪問模塊的共享數(shù)據(jù),每個處理程序也創(chuàng)建一個鎖來序列化對其底層I / O的訪問圈澈。
如果使用signal模塊來實現(xiàn)異步信號處理程序,則在該程序中無法使用logging模塊尘惧。
使用起來

總結

以上為自己在學習logging模塊時的記錄康栈,如有錯誤請各位指正,謝謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末啥么,一起剝皮案震驚了整個濱河市登舞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悬荣,老刑警劉巖菠秒,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氯迂,居然都是意外死亡践叠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門嚼蚀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禁灼,“玉大人,你說我怎么就攤上這事轿曙∨叮” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵导帝,是天一觀的道長守谓。 經(jīng)常有香客問我,道長您单,這世上最難降的妖魔是什么斋荞? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮睹限,結果婚禮上譬猫,老公的妹妹穿的比我還像新娘。我一直安慰自己羡疗,他們只是感情好染服,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叨恨,像睡著了一般柳刮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痒钝,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天秉颗,我揣著相機與錄音,去河邊找鬼送矩。 笑死蚕甥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的栋荸。 我是一名探鬼主播菇怀,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼凭舶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爱沟?” 一聲冷哼從身側響起帅霜,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呼伸,沒想到半個月后身冀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡括享,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年搂根,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶浦。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡兄墅,死狀恐怖,靈堂內的尸體忽然破棺而出澳叉,到底是詐尸還是另有隱情隙咸,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布成洗,位于F島的核電站五督,受9級特大地震影響,放射性物質發(fā)生泄漏瓶殃。R本人自食惡果不足惜充包,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遥椿。 院中可真熱鬧基矮,春花似錦、人聲如沸冠场。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碴裙。三九已至钢悲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舔株,已是汗流浹背莺琳。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载慈,地道東北人惭等。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像办铡,于是被迫代替她去往敵國和親咕缎。 傳聞我的和親對象是個殘疾皇子珠十,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)凭豪,斷路器,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 本文章是我大概三年前晒杈,在上家單位使用 Python 工作時結合官方文檔做的整理∩┥。現(xiàn)在 Python 官方文檔聽說已...
    好吃的野菜閱讀 217,063評論 14 232
  • 本文翻譯自logging howto 基礎教程 日志是跟蹤軟件運行時發(fā)生事件的一種手段。Python開發(fā)者在代碼中...
    大蟒傳奇閱讀 4,257評論 0 17
  • python的標準庫里的日志系統(tǒng)從Python2.3開始支持拯钻。只要import logging這個模塊即可使用帖努。如...
    大明白閱讀 4,226評論 0 50
  • 在他哄過之后,我就不生氣了粪般,心想也許他是真的吃醋吧拼余,可是也讓我看到他是個愛面子的人。他的前任亩歹,聽說是個酒吧服務員匙监,...
    魚水之歡閱讀 439評論 1 2