python:logging模塊基本操作

一麦轰、介紹

  1. 通過log分析可獲取程序的運(yùn)行情況,也可快速定位問題蒂培;
  2. 調(diào)試階段:一般需要所有的運(yùn)行日志來分析积糯;
    發(fā)布階段:日志僅需要記錄程序的異常信息和錯(cuò)誤信息等,若仍記錄所有的日志就會(huì)導(dǎo)致服務(wù)器的I/O壓力铝宵;
    故在不同的階段打掘,我們需要設(shè)置不的日志等級(jí)(通常可通過配置文件來指定日志等級(jí))鹏秋。
  3. 日志包含的主要字段:事件發(fā)生的時(shí)間胧卤、日志的等級(jí)、事件發(fā)生的位置拼岳、事件內(nèi)容......

二、日志等級(jí)介紹

  1. 日志等級(jí)一般包括5個(gè)等級(jí)况芒,依次為:DEBUG惜纸、INFO、WARNING绝骚、ERROR耐版、CRITICAL;
  2. 等級(jí)詳解
  • DEBUG:記錄調(diào)試的詳細(xì)日志信息压汪,一般在調(diào)試時(shí)開啟粪牲;
  • INFO:記錄普通的日志信息,包括錯(cuò)誤止剖、警告等等腺阳;
  • WARNING:記錄不影響程序正常運(yùn)行,但存在不期望的事件時(shí)的信息(記錄一些警告信息)穿香;
  • ERROR:嚴(yán)重問題亭引,影響某些功能正常運(yùn)行的信息
  • CRITICAL:致命問題,導(dǎo)致程序無法繼續(xù)運(yùn)行的信息
  1. 等級(jí)排序
    (1)日志等級(jí):DEBUG < INFO < WARNING < ERROR < CRITICAL皮获,從左到右日志信息依次減小焙蚓。
    (2)當(dāng)程序指定一個(gè)等級(jí)后,程序會(huì)記錄所有日志等級(jí) 指定等級(jí)的日志信息洒宝,而不是僅僅記錄指定級(jí)別的日志信息购公;小于指定等級(jí)的日志信息會(huì)被丟棄。
  2. logging模塊不同等級(jí)日志對(duì)應(yīng)的值
def get_log_level_value():
    """
    獲取log不同等級(jí)值
    :return: 
    """
    log_level = {
        'debug_value': logging.DEBUG,
        'info_value': logging.INFO,
        'warning_value': logging.WARNING,
        'error_value': logging.ERROR,
        'critical_value': logging.CRITICAL}
    return log_level
diff_level_value = get_log_level_value()
print(diff_level_value)
"""
{'debug_value': 10, 'info_value': 20, 'warning_value': 30, 'error_value': 40, 'critical_value': 50}
"""

三雁歌、logging模塊不同等級(jí)的函數(shù)

  1. 模塊導(dǎo)入方式:import logging
  • logging.debug(msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為DEBUG的日志記錄
  • logging.info(msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為INFO的日志記錄
  • logging.warning(msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為WARNING的日志記錄
  • logging.error(msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為ERROR的日志記錄
  • logging.critical(msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為CRITICAL的日志記錄
def sample_log_output():
    """
    最簡單的日志輸出記錄
    :return:
    """
    logging.info("This is a info log.")
    logging.debug("This is a debug log.")
    logging.warning("This is a warning log.")
    logging.error("This is a error log.")
    logging.critical("This is a critical log.")
sample_log_output()
"""結(jié)果
WARNING:root:This is a warning log.
ERROR:root:This is a error log.
CRITICAL:root:This is a critical log.
""" 
  1. 分析結(jié)果
    (1)輸出的結(jié)果字段代表: 日志級(jí)別:日志器名稱:日志內(nèi)容
    (2)僅輸出有WARNING宏浩、ERROR和CRITICAL三個(gè)日志等級(jí),原因是logging模塊提供的日志記錄函數(shù)所使用的日志器設(shè)置的日志級(jí)別是WARNING将宪,所有只有≥此級(jí)別的日志才會(huì)被輸出绘闷,<此級(jí)別的日志被丟棄橡庞;

四、logging模塊log函數(shù)

  • logging.log(level, msg, *args, **kwargs)
    創(chuàng)建一條等級(jí)為level的日志記錄
    Eg:使用log函數(shù)分別輸出一條不同日志級(jí)別的日志記錄
def log_function_output():
    """
    logging.log函數(shù)輸出
    :return:
    """
    logging.log(level=logging.INFO, msg="This is a info log.")
    logging.log(level=logging.DEBUG, msg="This is a debug log.")
    logging.log(level=logging.WARNING, msg="This is a warning log.")
    logging.log(level=logging.ERROR, msg="This is a error log.")
    logging.log(level=logging.CRITICAL, msg="This is a critical log.")
log_function_output()
"""結(jié)果
WARNING:root:This is a warning log.
ERROR:root:This is a error log.
CRITICAL:root:This is a critical log.
"""

五印蔗、logging模塊basicConfig函數(shù)

  • logging.basicConfig(**kwargs)
1. 函數(shù)介紹

basicConfig函數(shù)可對(duì)root logger進(jìn)行一次性配置扒最,即第一次調(diào)用此函數(shù)時(shí)起作用,之后再調(diào)用此函數(shù)不會(huì)起作用华嘹。

2.參數(shù)介紹

basicConfig函數(shù)參數(shù)

  • filename:指定日志文件名
  • filemode:指定日志文件打開模式(‘w’或‘a(chǎn)’)吧趣,默認(rèn)為a
  • datefmt:指定時(shí)間格式
  • level:指定日志級(jí)別
  • format:指定日志輸出的格式和內(nèi)容
    %(levelno)s:打印日志級(jí)別的數(shù)值(如10、20耙厚、30强挫、40、50)
    %(levelname)s:打印日志級(jí)別名稱(如DEBUG薛躬、INFO俯渤、WARNING、ERROR型宝、CRITICAL)
    %(pathname)s:打印當(dāng)前執(zhí)行程序的路徑
    %(filename)s:打印當(dāng)前執(zhí)行程序名八匠,包括后綴
    %(module)s:打印當(dāng)前執(zhí)行程序名,不包含后綴
    %(funcName)s:打印日志的當(dāng)前函數(shù)
    %(lineno)d:打印日志的當(dāng)前行號(hào)
    %(asctime)s:打印日志的時(shí)間
    %(thread)d:打印線程ID
    %(threadName)s:打印線程名稱
    %(process)d:打印進(jìn)程ID
    %(processName)s:打印進(jìn)程名稱
    %(message)s:打印日志信息
    %(name)s:打印所使用的日志器名稱趴酣,默認(rèn)為root
  • stream:指定日志的輸出流梨树,可輸出到sys.stderr、sys.stdout或文件岖寞,默認(rèn)輸出到sys.stderr抡四;
  • style:指定format格式字符串的風(fēng)格,默認(rèn)為%(可取值為%仗谆、{指巡、$)
  • handlers:一個(gè)創(chuàng)建多個(gè)Handler的可迭代對(duì)象,Handler將會(huì)被添加到root logger中

注意事項(xiàng):

  • handlers胸私、filename和stream不可同時(shí)存在厌处,否則報(bào)錯(cuò)(ValueError: 'stream' and 'filename' should not be specified together);
  • datefmt需要format中包含有%(asctime)s時(shí)才會(huì)生效岁疼,否則無效阔涉;
def basicConfig_function():
    """
    logging模塊基本配置函數(shù)
    :return:
    """
    log_format = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s'
    date_format = '%Y%m%d_%H:%M:%S'
    file_mode = 'w'
    file_name = "my.log"
    logging.basicConfig(level=logging.DEBUG, format=log_format, datefmt=date_format, filemode=file_mode, filename=file_name)
    logging.info("info_log")
    logging.debug("debug_log")
    logging.warning("warning_log")
    # logger = logging.getLogger(__name__)
    # logger.info("info_log")
    # logger.debug("debug_log")
    # logger.warning("warning_log")
basicConfig_function()
'''結(jié)果(logging方式或logger方式均可)
20190129_16:21:45 logging_operate.py [line:74] INFO info_log
20190129_16:21:45 logging_operate.py [line:75] DEBUG debug_log
20190129_16:21:45 logging_operate.py [line:76] WARNING warning_log
'''
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捷绒,隨后出現(xiàn)的幾起案子瑰排,更是在濱河造成了極大的恐慌,老刑警劉巖暖侨,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭住,死亡現(xiàn)場離奇詭異,居然都是意外死亡字逗,警方通過查閱死者的電腦和手機(jī)京郑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宅广,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人些举,你說我怎么就攤上這事跟狱。” “怎么了户魏?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵驶臊,是天一觀的道長。 經(jīng)常有香客問我叼丑,道長关翎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任鸠信,我火速辦了婚禮纵寝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘星立。我一直安慰自己店雅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布贞铣。 她就那樣靜靜地躺著,像睡著了一般沮明。 火紅的嫁衣襯著肌膚如雪辕坝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天荐健,我揣著相機(jī)與錄音酱畅,去河邊找鬼。 笑死江场,一個(gè)胖子當(dāng)著我的面吹牛纺酸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播址否,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼餐蔬,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了佑附?” 一聲冷哼從身側(cè)響起樊诺,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎音同,沒想到半個(gè)月后词爬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡权均,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年顿膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锅锨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恋沃,死狀恐怖必搞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芽唇,我是刑警寧澤顾画,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站匆笤,受9級(jí)特大地震影響研侣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炮捧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一庶诡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咆课,春花似錦末誓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殊校,卻和暖如春晴玖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背为流。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工呕屎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敬察。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓秀睛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莲祸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹂安,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、給路由添加正則表達(dá)式 給路由參數(shù)添加正則表達(dá)式的原因:在實(shí)際開發(fā)時(shí)锐帜,url中往往會(huì)帶有很多的參數(shù)藤抡,例如:/ad...
    IIronMan閱讀 1,628評(píng)論 1 12
  • 在現(xiàn)實(shí)生活中,記錄日志非常重要抹估。銀行轉(zhuǎn)賬時(shí)會(huì)有轉(zhuǎn)賬記錄缠黍;飛機(jī)飛行過程中,會(huì)有黑盒子(飛行數(shù)據(jù)記錄器)記錄飛行過程中...
    chliar閱讀 765評(píng)論 1 0
  • 本文翻譯自logging howto 基礎(chǔ)教程 日志是跟蹤軟件運(yùn)行時(shí)發(fā)生事件的一種手段药蜻。Python開發(fā)者在代碼中...
    大蟒傳奇閱讀 4,254評(píng)論 0 17
  • 時(shí)間過得好快瓷式,一眨眼就到周三了替饿。周四周五去上海參加FIC,周末已經(jīng)約好在朋友家過贸典。這樣一算视卢,這一周就過去了。 今晚...
    StarrySky_0ee7閱讀 147評(píng)論 0 1
  • 熱鬧的電影春節(jié)檔落幕廊驼,在票房刷新紀(jì)錄的同時(shí)据过,由電影衍生出的各種周邊產(chǎn)品也備受關(guān)注。伴隨著國內(nèi)票房規(guī)模的節(jié)節(jié)攀升和國...
    尊寶影視閱讀 128評(píng)論 0 1