logging記錄日誌

2022-05-04 12:54:11 字數 3804 閱讀 8590

日誌是乙個系統的重要組成部分,用以記錄使用者操作系統執行狀態錯誤資訊。日誌記錄的好壞直接關係到系統出現問題時定位的速度。logging模組python2.3版本開始成為python標準庫的一部分。

在最簡單的使用中,我們直接匯入logging模組,然後呼叫它的debuginfowarnerrorcritical等函式記錄日誌。預設情況下,logging模組將日誌列印到螢幕終端,日誌級別為warnning,也就是說日誌級別大於等於warning的日誌才會被顯示

#

!/usr/bin/python3

import

logging

logging.debug(

'debug message')

logging.info(

'info message')

logging.warn(

'warn message')

logging.error(

'error.message')

logging.critical(

'critical.message

')

default_logging.py

程式執行結果如下:

$ python3 default_logging.py 

warning:root:warn message

error:root:error.message

critical:root:critical.message

日誌級別是乙個邏輯上的概念,用來區分日誌的重要程度。將日誌分為不停級別的日誌後,一方面可以在大多數時間只儲存級別比較高的日誌來提高效能;領一方面也便於日誌的分析。例如,從乙個超大的日誌檔案中,快速找出幾條錯誤資訊。

在python的logging模組中,日誌分為5個級別:

日誌級別

權重含義

caitical

50嚴重錯誤,表名軟體已不能繼續執行了

error

40發生嚴重的錯誤,必須馬上處理

warning

30應用程式可以容忍這些資訊,軟體還是在正常工作,不過它們應該被檢查及修復,否則將在不久的將來發生問題

info

20證明事情按預期工作,突出強調應用程式的執行過程

debug

10詳細資訊,只有開發人員除錯程式時才需要關注的事情

在使用logging記錄日誌之前,我們可以進行一些簡單的配置,如下:

#

!/usr/bin/python3

import

logging

logging.basicconfig(filename='

', level=logging.info)

logging.debug(

'debug message')

logging.info(

'info message')

logging.warn(

'warn message')

logging.error(

'error.message')

logging.critical(

'critical.message

')

上面我們通過basicconfig方法對日誌進行了簡單的配置,我們也可以進行更加複雜的日誌配置。在這之前先了解logging模組中的幾個概念:

在典型的使用場景中,乙個日誌記錄器使用乙個日誌處理器,乙個日誌處理器使用乙個日誌格式化

python的logging模組提供給你了多種方式來配置日誌。對於比較簡單的指令碼,可以直接使用basicconfig在**中配置日誌對於比較複雜的專案,可以將日誌的配置儲存在乙個配置檔案中,然後在**中使用fileconfig函式讀取配置檔案。

在這個例子中,日誌檔案會儲存所有debug級別及以上級別的日誌。每一條日誌包含了列印日誌的時間,日誌的級別和日誌的內容

#

!/usr/bin/python3

import

logging

logging.basicconfig(

filename='',

level=logging.debug,

format='

%(asctime)s : %(levelname)s : %(message)s')

logging.debug(

'debug message')

logging.info(

'info message')

logging.warn(

'warn message')

logging.error(

'error.message')

logging.critical(

'critical.message

')

對於複雜的專案,一般將日誌配置儲存到配置檔案中。如下:logging.cnf

#

首先在[loggers]宣告乙個名為root的logger

[loggers]

keys =root

#在[handlers]中宣告乙個名為logfile的handler

[handlers]

keys =logfile

#在[formatters]中宣告乙個名為generic的formatter

[formatters]

keys =generic

#在[logger_root]中定義root這個logger所使用的handler

[logger_root]

handlers =logfile

#在[handler_logfile]中定義handler輸出日誌方式、日誌檔案的切換時間等

[handler_logfile]

class =handlers.timedrotatingfilehandler

args = ('',)

level =debug

format =generic

#[在formatter_generic]中定義了日誌的格式,包括日誌產生的時間、日誌級別、產生日誌的檔名和行號等資訊

[formatter_generic]

format = '

%(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s

'

python**中使用logging.config模組的fileconfig函式載入日誌配置

#

!/usr/bin/python3

import

logging

import

logging.config

logging.config.fileconfig(

'logging.cnf')

logging.debug(

'debug message')

logging.info(

'info message')

logging.warn(

'warn message')

logging.error(

'error.message')

logging.critical(

'critical.message

')

python 記錄日誌logging

在專案開發中,往往要記錄日誌檔案。用python記錄日誌有兩種方式 1 利用python 自帶的logging庫,例如 coding utf 8 import osimport codecs import datetime import logging 封裝logging日誌 class logfi...

logging模組日誌記錄

coding utf 8 import logging,os from time import strftime now strftime y m d.h.m.s.class log object def init self 檔案的命名 self.logname os.path.join os.pa...

python 記錄日誌logging

在專案開發中,往往要記錄日誌檔案。用python記錄日誌有兩種方式 1 利用python 自帶的logging庫,例如 coding utf 8 import osimport codecs import datetime import logging 封裝logging日誌 class logfi...