Python logging模組原理解析及應用

2022-10-04 13:45:33 字數 3824 閱讀 2623

一、logging日誌模組等級

常見log級別從高到低:

critical 》error 》warning 》info 》debug,預設等級為warning,=warning級別的log才輸出。

程式設計客棧

日誌等級(level)

描述critical

當發生嚴重錯誤,導致應用程式不能繼續執行時記錄的資訊

error

由於乙個更嚴重的問題導致某些功能不能正常執行時記錄的資訊

warning

當sxbfv某些不期望的事情發生時記錄的資訊(如,磁碟可用空間較低),但是此時應用程式還是正常執行的

info

資訊詳細程度僅次於debug,通常只記錄關鍵節點資訊,用於確認一切都是按照我們預期的那樣進行工作

debug

最詳細的日誌資訊,典型應用場景是 問題診斷

二、logging模組的使用方式介紹

logging模組提供了兩種記錄日誌的方式:

其實,logging所提供的模組級別的日誌記錄函式也是對logging日誌系統相關類的封裝而已。

(1)logging模組定義的模組級別的常用函式

函式說明

logging.debug(msg, *args, **kwargs)

建立一條嚴重級別為debug的日誌記錄

logging.info(msg, *args, **kwargs)

建立一條嚴重級別為info的日誌記錄

logging.warning(msg, *args, **kwargs)

建立一條嚴重級別為warning的日誌記錄

logging.error(msg, *args, **kwargs)

建立一條嚴重級別為error的日誌記錄

logging.critical(msg, *args, **kwargs)

建立一條嚴重級別為critical的日誌記錄

logging.log(level, *args, **kwargs)

建立一條嚴重級別為level的日誌記錄

logging.basicconfig(**kwargs)

對root logger進行一次性配置

其中logging.basicconfig(**kwargs)函式用於指定「要記錄的日誌級別」、「日誌格式」、「日誌輸出位置」、「日誌檔案的開啟模式」等資訊,其他幾個都是用於記錄各個級別日誌的函式。

(2)logging模組的四大元件

元件說明

loggers

提**用程式**直接使用的介面

handlers

用於將日誌記錄傳送到指定的目的位置

filters

提供更細粒度的日誌過濾功能,用於決定哪些日誌記錄將會被輸出(其它的日誌記錄將會被忽略)

formatters

用於控制日誌資訊的最終輸出格式

三、自定義logger模組類

# testlog1.py

import logging

import time

class logger():

def __init__(self, logger, level=logging.debug):

'''     : 自定義logger模組類

: logger: logger名

: level: 日誌級別

'''# 建立乙個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: 日誌事件發生的時間

# filename: 原始檔的名稱部分,包含檔案字尾

# lineno: 呼叫日誌記錄函式的源**所在的行號

# evelname: 該日誌記錄的文字形式的日誌級別

# message: 日誌記錄的文字內容

# 建立乙個handler, 用於寫入日誌檔案

fh = logging.filehandler(self.logfilename)

fh.setlevel(logging.debug)

fh.setformatter(fmt)

# 再建立乙個handler,用於輸出到控制台

ch = logging.streamhandler()

ch.setlevel(logging.debug)

ch# 給logger新增handler

self.logger.addhandler(fh)

self.logger.addhandler(ch)

# level優先順序

# 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')# 執行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()# 執行testlog2.py,則控制台輸出如下:2020-08-03 20:43:44,907 - testlog2.py:[11] - [info] - 測試失敗,輸出資訊如下:traceback (most recent call last):  file "e:/imooc/testlog.py", lin程式設計客棧e 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

本文標題: python logging模組原理解析及應用

本文位址: /jiaoben/python/333767.html

Python logging模組學習

import logging 日誌級別列表,預設為logging.warning levels logging.notset,logging.debug,logging.info,logging.warning,logging.error,logging.critical log format as...

python logging模組簡介

logging模組是python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級 日誌儲存路徑 日誌檔案回滾等。相對於print,該模組具有可以決定在列印什麼級別的資訊和將資訊輸出放置在什麼地方的優點。配置logging的基本設定,並在控制台輸出 import logging loggi...

Python logging日誌模組

1.日誌的級別 日誌一共分成5個等級,從低到高分別是 1 debug 2.info 3.warning 4.error 5.critical說明 這5個等級,也分別對應5種打日誌的方法 debug info warning error critical。預設的是 warning,當在warning或...