python logging模块的作用及应用场景_Python logging模块原理解析及应用
一、logging日志模塊等級
常見log級別從高到低:
CRITICAL 》ERROR 》WARNING 》INFO 》DEBUG,默認等級為WARNING,即>=WARNING級別的log才輸出。
日志等級(level)
描述
CRITICAL
當發(fā)生嚴重錯誤,導(dǎo)致應(yīng)用程序不能繼續(xù)運行時記錄的信息
ERROR
由于一個更嚴重的問題導(dǎo)致某些功能不能正常運行時記錄的信息
WARNING
當某些不期望的事情發(fā)生時記錄的信息(如,磁盤可用空間較低),但是此時應(yīng)用程序還是正常運行的
INFO
信息詳細程度僅次于DEBUG,通常只記錄關(guān)鍵節(jié)點信息,用于確認一切都是按照我們預(yù)期的那樣進行工作
DEBUG
最詳細的日志信息,典型應(yīng)用場景是 問題診斷
二、logging模塊的使用方式介紹
logging模塊提供了兩種記錄日志的方式:
第一種方式是使用logging提供的模塊級別的函數(shù)
第二種方式是使用Logging日志系統(tǒng)的四大組件
其實,logging所提供的模塊級別的日志記錄函數(shù)也是對logging日志系統(tǒng)相關(guān)類的封裝而已。
(1)logging模塊定義的模塊級別的常用函數(shù)
函數(shù)
說明
logging.debug(msg, *args, **kwargs)
創(chuàng)建一條嚴重級別為DEBUG的日志記錄
logging.info(msg, *args, **kwargs)
創(chuàng)建一條嚴重級別為INFO的日志記錄
logging.warning(msg, *args, **kwargs)
創(chuàng)建一條嚴重級別為WARNING的日志記錄
logging.error(msg, *args, **kwargs)
創(chuàng)建一條嚴重級別為ERROR的日志記錄
logging.critical(msg, *args, **kwargs)
創(chuàng)建一條嚴重級別為CRITICAL的日志記錄
logging.log(level, *args, **kwargs)
創(chuàng)建一條嚴重級別為level的日志記錄
logging.basicConfig(**kwargs)
對root logger進行一次性配置
其中l(wèi)ogging.basicConfig(**kwargs)函數(shù)用于指定“要記錄的日志級別”、“日志格式”、“日志輸出位置”、“日志文件的打開模式”等信息,其他幾個都是用于記錄各個級別日志的函數(shù)。
(2)logging模塊的四大組件
組件
說明
loggers
提供應(yīng)用程序代碼直接使用的接口
handlers
用于將日志記錄發(fā)送到指定的目的位置
filters
提供更細粒度的日志過濾功能,用于決定哪些日志記錄將會被輸出(其它的日志記錄將會被忽略)
formatters
用于控制日志信息的最終輸出格式
三、自定義Logger模塊類
# testLog1.py
import logging
import time
class Logger():
def __init__(self, logger, level=logging.DEBUG):
''' : 自定義Logger模塊類
: logger: logger名
: level: 日志級別
'''
# 創(chuàng)建一個logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(level)
# 定義handler的輸出格式
curr_time = time.strftime("%Y-%m-%d")
self.LogFileName = 'log' + curr_time + '.txt'
fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s')
# asctime: 日志事件發(fā)生的時間
# filename: 源文件的名稱部分,包含文件后綴
# lineno: 調(diào)用日志記錄函數(shù)的源代碼所在的行號
# evelname: 該日志記錄的文字形式的日志級別
# message: 日志記錄的文本內(nèi)容
# 創(chuàng)建一個handler, 用于寫入日志文件
fh = logging.FileHandler(self.LogFileName)
fh.setLevel(logging.DEBUG)
fh.setFormatter(fmt)
# 再創(chuàng)建一個handler,用于輸出到控制臺
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(fmt)
# 給logger添加handler
self.logger.addHandler(fh)
self.logger.addHandler(ch)
# level優(yōu)先級
# logger.setLevel > handler.setLevel > logging.basicConfig
if __name__ == "__main__":
log = Logger(__name__, level=logging.DEBUG)
log.logger.debug('debug')
log.logger.log(logging.DEBUG, 'debug')# 執(zhí)行testLog1.py,則控制臺輸出如下:2020-08-03 20:36:47,104 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug# 日志文件記錄如下:2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:15,982 - testLog1.py:[118] - [DEBUG] - debug
# testLog2.py
from testLog1 import Logger
import traceback
log = Logger(__name__)
def func():
try:
assert 1==2
except Exception:
log.logger.info('測試失敗,輸出信息如下:{}'.format(traceback.format_exc())) # traceback.format_exc() 會返回異常信息的字符串
if __name__ == "__main__":
func()# 執(zhí)行testLog2.py,則控制臺輸出如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 測試失敗,輸出信息如下:Traceback (most recent call last):? File "E:/imooc/testLog.py", line 9, in func??? assert 1==2AssertionError# 日志文件記錄如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 測試失敗,輸出信息如下:Traceback (most recent call last):? File "E:/imooc/testLog.py", line 9, in func??? assert 1==2AssertionError
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持python博客。
總結(jié)
以上是生活随笔為你收集整理的python logging模块的作用及应用场景_Python logging模块原理解析及应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: antimalware可以关闭吗_iPh
- 下一篇: php对学历要求较低,学历低学起php来