python日誌 python日誌處理

2021-10-11 04:56:32 字數 4607 閱讀 7655

一、日誌概念

日誌是一種可以追蹤某些軟體執行時所發生事件的方法。 軟體開發人員可以向他們的**中

呼叫日誌記錄相關的方法來表明發生了某些事情。 乙個事件可以用乙個可包含可選變數資料

的訊息來描述。 此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級別(level)。

python自身也提供了乙個用於記錄日誌的標準庫模組--logging。 logging模組定義的函式和

類為應用程式和庫的開發實現了乙個靈活的事件日誌系統,由標準庫模組提供日誌記錄api,

關鍵好處是所有python模組都可以使用這個日誌記錄功能。 所以,你的應用日誌可以將你自

己的日誌資訊與來自第三方模組的資訊整合起來。

總之,日誌的作用就是:

除錯軟體程式

了解軟體程式運**況,確定軟體執行是否執行正常

軟體程式故障分析與定位

二、logging模組

1、logging日誌級別

日誌級別

數值使用範圍

critical

特別糟糕的事情,如記憶體耗盡,磁碟空間為空,一般很少使用

error

發生錯誤時,如io操作失敗或者連線問題

warning

發生很重要的事情,但並不是錯誤,是警告資訊

info

處理請求或者狀態變化等日常事務

debug

除錯過程中使用debug等級,如演算法中每個迴圈的中間狀態

notset

很少使用

內建等級中,級別最低的是debug,級別最高的是critical。例如setlevel(logging.info),此時函式引數為info,那麼該logger將只會處理info、warning、error和critical級別的日誌,而debug級別的訊息將會被忽略/丟棄。

2、logging日誌系統的四大元件

在實際操作中,一般是先建立日誌記錄器(logging.getlogger),然後再設定日誌級別(logger.setlevel),接著再建立日誌檔案,也就是日誌儲存的地方(logging.filehandler),然後再設定日誌格式(logging.formatter),最後再將日誌處理程式記錄到記錄器(addhandler)

元件名稱

類名功能簡介

日誌器logger

處理器handler

決定將日誌記錄分配至正確的目的地

過濾器filter

對日誌資訊進行過濾,提供更細粒度的日誌來判斷輸出哪條日誌記錄

格式器formatter

決定日誌記錄的最終輸出格式

日誌器(loggers)是入口,真正工作的是處理器(handler),處理器(handler)還可以通過過濾器(filter)和格式器(formatter)對要輸出的日誌內容做過濾和格式化等處理操作。

logger類:配置方法和訊息傳送方法

配置方法

方法功能描述

logger.setlevel()

設定記錄器將會處理的最低嚴重級別的日誌

logger.addhandler()

為logger物件新增乙個handler物件

logger.removehandler()

為logger物件移除乙個handler物件

logger.addfilter()

為logger物件新增乙個filter物件

logger.removefilter()

為logger物件移除乙個filter物件

訊息傳送方法

方法功能描述

logger.debug(),logger.info(),logger.warning(),logger.error(),logger.critical(),

建立乙個與其方法名對應等級的日誌記錄

logger.exception()

建立乙個類似與logger.error()的日誌記錄

logger.log()

需要獲取乙個明確的日誌level引數來建立乙個日誌記錄

handler類:常用配置方法

方法功能描述

handler.setlevel()

設定handler將會處理的最低嚴重級別的日誌

handler.setformatter()

為handler設定乙個格式器物件

handler.addfilter()

為handler新增乙個過濾器物件

handler.removefilter()

為handler移除乙個過濾器物件

需要說明的是,應用程式**不應該直接例項化和使用handler例項。因為handler是乙個基類,它只定義了素有handlers都應該有的介面,同時提供了一些子類可以直接使用或覆蓋的預設行為。下面是一些常用的handler

handler

功能描述

logging.filehandler

將日誌訊息傳送到磁碟檔案,預設情況下檔案大小會無限

logging.streamhandler

將訊息傳送到輸出到stream,如std.out,std.err任 file-like物件,也就是顯示在除錯終端

logging.handlers.rotating.filehandler

將日誌訊息傳送到磁碟檔案,並支援日誌檔案按大小切割

logging.handlers.timedrotatingfilehandler

將日誌訊息傳送到磁碟檔案,並支援日誌檔案按時間切割

將日誌訊息以get或post的方式傳送給乙個http伺服器

logging.handlers.smtphandler

將日誌訊息傳送給乙個指定的email位址

logging.handlers.nullhandler

該handler例項會忽略error messages,通常被想使用logging的library開發者使用來避免'no handlers could be found for logger ***'資訊的出現.

filter類:可以被handler和logger用來做比level更細粒度的、更複雜的過濾功能。

filter是乙個過濾器基類,它只允許某個logger層級下的日誌事件通過過濾。

formater類:用於配置日誌資訊的最終順序、結構和內容

formater物件與logging.handler基類不同的是,應用**可以直接例項化formatter類。另外,如果你的應用程式需要一些特殊的處理行為,也可以實現乙個formatter的子類來完成。

格式說明

%(levelno)s

列印日誌級別的數值

%(levelname)s

列印日誌級別的名稱

%(pathname)s

列印當前執行程式的路徑,其實就是sys.ar**[0]

%(filename)s

列印當前執行程式名

%(funcname)s

列印日誌的當前函式

%(lineno)d

列印日誌的當前行號

%(asctime)s

列印日誌的時間

%(thread)d

列印執行緒id

%(threadname)s

列印執行緒名稱

%(process)d

列印程序id

%(message)s

列印日誌資訊

3、示例

import logging

#建立日誌級別

logger = logging.getlogger(__name__)

logger.setlevel(logging.info)

#建立日誌檔案

handler_info = logging.filehandler('info_log.txt')

handler_info.setlevel(logging.info)

handler_warn = logging.filehandler('warning_log.txt')

handler_warn.setlevel(logging.warning)

#定義日誌格式

formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler_info.setformatter(formatter)

handler_warn.setformatter(formatter)

#新增到日誌記錄器中

logger.addhandler(handler_info)

logger.addhandler(handler_warn)

logger.info('information')

logger.warning('warning')

開啟'warning_log.txt'檔案,輸出:

2019-08-23 18:05:25,162 - __main__ - warning - warning

開啟『info_log.txt'檔案,輸出:

2019-08-23 18:05:25,161 - __main__ - info - information

2019-08-23 18:05:25,162 - __main__ - warning - warning

python日誌等級 python 日誌輸出級別

import logging logging.basicconfig level logging.debug,format asctime s filename s line lineno d levelname s message s datefmt a,d b y h m s filename ...

Python3日誌記錄模組logging

日誌等級 等級描述 debug 最詳細的日誌資訊,典型應用場景是問題診斷 info 資訊詳細程度僅次於debug,通常只記錄關鍵節點資訊,用於確認一切都是按照我們預期的那樣進行工作 warning 當某些不期望的事情發生時記錄的資訊 如,磁碟可用空間較低 但是此時應用程式還是正常執行的 error ...

Python日誌列印

簡單示例 import sys import ctypes import logging import logging.handlers reload sys sys.setdefaultencoding utf 8 log file test log logging.basicconfig fil...