python使用logger實現日誌回滾和異常捕捉

2022-09-06 03:00:13 字數 4085 閱讀 9410

使用logger模組設定日誌輸出到檔案中,使用timedrotatingfilehandler

import

time

import

logging

import

logging.handlers

defloghandler(name):

#初始化logging

logging.basicconfig()

mylog=logging.getlogger(name)

#設定日誌級別

mylog.setlevel(logging.info)

#新增timeroatingfilehandler

#定義乙個1天換一次log檔案的handler

#保留7個舊log檔案

timefilehandler=logging.handlers.timedrotatingfilehandler("

log1/log.log

",when='

d',interval=1,backupcount=7)

timefilehandler.suffix="

%y-%m-%d.log"#

設定log記錄輸出的格式

formatter=logging.formatter('

%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d-%(message)s')

timefilehandler.setformatter(formatter)

#新增到logger中

mylog.addhandler(timefilehandler)

return mylog

使用traceback statck追蹤記錄**異常,格式為:

try

: do-something-block

except

: logger.exception(

"exception logged

")

最終**:

import

time

import

logging

import

logging.handlers

defloghandler(name):

#初始化logging

logging.basicconfig()

mylog=logging.getlogger(name)

#設定日誌級別

mylog.setlevel(logging.info)

#新增timeroatingfilehandler

#定義乙個1天換一次log檔案的handler

#保留7個舊log檔案

timefilehandler=logging.handlers.timedrotatingfilehandler("

log1/log.log

",when='

d',interval=1,backupcount=7)

timefilehandler.suffix="

%y-%m-%d.log"#

設定log記錄輸出的格式

formatter=logging.formatter('

%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d-%(message)s')

timefilehandler.setformatter(formatter)

#新增到logger中

mylog.addhandler(timefilehandler)

return

mylog

#呼叫函式,實現日誌輸出

log=loghandler('

mylog')

try:

assert 1==2log.info(

'hello')

except

:

#實現追蹤異常返回資訊

log.exception("

failed to assert 1==2

")

實現捕獲異常效果如下:

1、日誌記錄輸出的格式,例項化formatter類

屬性名稱

格式  

說明  

name

%(name)s

日誌的名稱

asctime

%(asctime)s

可讀時間,預設格式『2003-07-08 16:49:45,896』,逗號之後是毫秒

filename

%(filename)s

檔名,pathname的一部分

pathname

%(pathname)s

檔案的全路徑名稱

funcname

%(funcname)s

呼叫日誌多對應的方法名

levelname

%(levelname)s

日誌的等級

levelno

%(levelno)s

數位化的日誌等級

lineno

%(lineno)d

被記錄日誌在原始碼中的行數

module

%(module)s

模組名msecs

%(msecs)d

時間中的毫秒部分

process

%(process)d

程序的id

processname

%(processname)s

程序的名稱

thread

%(thread)d

執行緒的id

threadname

%(threadname)s

執行緒的名稱

relativecreated

%(relativecreated)d

日誌被建立的相對時間,以毫秒為單位

2、日誌級別

fatal(致命錯誤,一般不用)>critical(嚴重錯誤,級別數值50)>error(錯誤,級別數值40)>warning(警告資訊,級別數值30)>info(日常資訊,級別數值20)>debug(調式資訊,級別數值10)

格式為:

setlevel(logging.info)
3、按照時間日誌回滾

格式:

timedrotatingfilehandler(filename [,when [,interval [,backupcount]]])
when 是乙個字串的定義如下:

「s」: seconds

「m」: minutes

「h」: hours

「d」: days

「w」: week day (0=monday)

「midnight」: roll over at midnight

interval: 是指等待多少個單位when的時間後,logger會自動重建檔案,當然,這個檔案的建立

取決於filename+suffix,若這個檔案跟之前的檔案有重名,則會自動覆蓋掉以前的檔案,所以

有些情況suffix要定義的不能因為when而重複。

backupcount :是保留日誌個數。預設的0是不會自動刪除掉日誌。若設7,則在檔案的建立過程中

庫會判斷是否有超過這個7,若超過,則會從最先建立的開始刪除。

4、按照檔案大小回滾日誌

logging.handlers.rotatingfilehandler(

'log-day/mydemo.log

', maxbytes=1*1024, backupcount=5)

maxbytes:每個日誌檔案最大的大小(這裡設定1k)

backupcount: 是保留日誌個數。預設的0是不會自動刪除掉日誌。若設7,則在檔案的建立過程中

庫會判斷是否有超過這個數,若超過,則會從最先建立的開始刪除。

如何使用logger

ruby的logger也是一貫地簡單。控制日誌檔案大小,保留10個歷史檔案,檔案大小最大為1024000位元組 logger logger.new foo.log 10,1024000 每日 星期 月乙個日誌檔案 logger logger.new foo.log daily logger logg...

python常用模組 logger模組

python的logging模組提供了通用的日誌系統,熟練使用logging模組可以方便開發者開發第三方模組或者是自己的python應用。python使用logging模組記錄日誌涉及四個主要的類 logger 提供了應用程式可以直接使用的介面 handler 將 logger建立的 日誌記錄傳送到...

Logger日誌框架使用學習

最近也開始注重開發的規範,以前開發專案的時候很少會去使用日誌框架記錄一些東西,部門大佬也提了希望我們著手開始尊重開發規範,所以先學習下日誌框架的用法以及應用場景 我們在 中經常能夠看到以下 該方法的作用就是返回與引數傳遞類對應的logger物件。這邊主要是有個logge ctory對我們的日誌進行管...