Python日誌功能與處理邏輯

2022-07-13 12:36:07 字數 3012 閱讀 8622

在應用程式執行過程中,我們希望通過規範格式輸出程式執行的詳細資訊,這時我們需要用到日誌功能。在python語言中,有個內建模組logging能夠很好的實現日誌功能。整體來說,logging配置可以分成4個部分:loggershandlersfiltersformatters。接下來我們詳細**其處理邏輯和配置方法。

每個事件生成日誌條目稱之為logrecord,在logrecord中包含了日誌級別日誌元資料資訊兩個重要組成部分。在python語言中日誌級別可以分為5個等級:

formatter主要用於渲染日誌的輸出格式,在python中給定了內建的格式變數,我們可以自定義日誌資訊的輸出格式。

格式變數列舉:

%(name)s logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文字形式的日誌級別

%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有

%(filename)s 呼叫日誌輸出函式的模組的檔名

%(module)s 呼叫日誌輸出函式的模組名

%(funcname)s 呼叫日誌輸出函式的函式名

%(lineno)d 呼叫日誌輸出函式的語句所在的**行

%(created)f 當前時間,用unix標準的表示時間的浮 點數表示

%(relativecreated)d 輸出日誌資訊時的,自logger建立以 來的毫秒數

%(asctime)s 字串形式的當前時間。預設格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒

%(thread)d 執行緒id。可能沒有

%(threadname)s 執行緒名。可能沒有

%(process)d 程序id。可能沒有

%(message)s使用者輸出的訊息

filter用來為日誌資訊的處理提供額外的過濾選項。在預設情況下,從logger獲取到的每一條logrecord都會交給handler處理。但是,當我們有一些額外的處理邏輯,比方說我希望將logrecord的日誌級別變更,或者我希望後續僅處理error型別的記錄,那麼就可以使用filter來過濾。

handler是日誌處理的核心,描述了程式日誌的後續執行方式。一般而言,我們希望日誌能夠輸出到console顯示,或者寫成檔案本地持久化儲存,都要靠handler來實現。為此,python中主要提供了filehandlerstreamhandler兩種handler來分別執行檔案儲存和控制台列印兩種日誌處理方式。

函式式配置日誌輸出是最簡單的方式,我們可以將日誌列印到檔案中。但是,這種方式有個缺陷,即無法將日誌列印到console。

特點:配置簡單,但無法同時輸出控制台和檔案

import logging

logging.basicconfig(

level=logging.debug, # 設定列印日誌的級別

# 日誌訊息格式,level=日誌級別 format=日誌格式 asctime=對應下面的datefmt filename=日誌檔案路徑

format="%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s",

datefmt="%y-%d-%d %h:%m:%s",

filename="1.log",

# a=追加 w=覆蓋

filemode="a"

)logging.debug("debug")

logging.info("info")

物件式配置日誌能夠較強的進行定製化配置,包括日誌的輸出格式、控制台輸出、輸出本地檔案持久化儲存。因此,在實際使用時一般都採用物件式配置日誌的方式來處理。

特點:定製化強,配置較為複雜

建立並獲取logger物件;

建立filehandler物件;

建立streamhandler物件;

建立formatter物件;

給handler物件繫結formatter;

給logger物件繫結handler

import logging

logger = logging.rootlogger("debug") # 如果要自定義level,則可使用rootlogger,或者logger.setlevel()

# logger = logging.getlogger() # 使用getlogger預設level為warning

fh = logging.filehandler('test.log', encoding='utf-8') # 建立filehandler物件

sh = logging.streamhandler() # 建立streamhandler物件

fmt = logging.formatter("%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s")

fh.setformatter(fmt) # 給handler物件繫結formatter

sh.setformatter(fmt) # 給handler物件繫結formatter

logger.addhandler(fh) # 給logger物件繫結handler

logger.addhandler(sh) # 給logger物件繫結handler

logger.info('info')

logger.debug('debug')

logger.error("error")

python日誌 python日誌處理

一 日誌概念 日誌是一種可以追蹤某些軟體執行時所發生事件的方法。軟體開發人員可以向他們的 中 呼叫日誌記錄相關的方法來表明發生了某些事情。乙個事件可以用乙個可包含可選變數資料 的訊息來描述。此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級別 level python自身也提供了乙個用於記錄...

Python字串內建函式功能與用法總結

字串內建總結 需要注意的是 大小寫處理 函式作用 示例輸出 capitalize 首字母大寫,其餘小寫 lk with psr capitalize lk with psr upper 全部大寫 lk with psr upper lk with psr lower 全部小寫 lk wit程式設計客...

python 日誌處理之logging

日誌是用來記錄程式在執行過程中發生的狀況,在程式開發過程中新增日誌模組能夠幫助我們了解程式執行過程中發生了哪些事件,這些事件也有輕重之分。根據事件的輕重可分為以下幾個級別 debug 詳細資訊,通常僅在診斷問題時才受到關注。整數level 10 info 確認程式按預期工作。整數level 20 w...