Python中l(wèi)ogging日志記錄到文件及自動分割的操作代碼
日志作為項(xiàng)目開發(fā)和運(yùn)行中必備組件,python提供了內(nèi)置的logging模塊來完成這個工作;借助 TimedRotatingFileHandler 可以按日期自動分割日志,自動保留日志文件數(shù)量等,下面是對日志的一個簡單封裝和測試。
import logging
import os
from logging import handlers
class Logger(object):
# 日志級別關(guān)系映射
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(self,
filename,
level='info',
when='D',
back_count=3,
fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
f_dir, f_name = os.path.split(filename)
os.makedirs(f_dir, exist_ok=True) # 當(dāng)前目錄新建log文件夾
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt) # 設(shè)置日志格式
self.logger.setLevel(self.level_relations.get(level)) # 設(shè)置日志級別
sh = logging.StreamHandler() # 往屏幕上輸出
sh.setFormatter(format_str) # 設(shè)置屏幕上顯示的格式
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=back_count,
encoding='utf-8') # 往文件里寫入指定間隔時間自動生成文件的Handler
# 實(shí)例化TimedRotatingFileHandler
# interval是時間間隔,backupCount是備份文件的個數(shù),如果超過這個個數(shù),就會自動刪除,when是間隔的時間單位,單位有以下幾種:
# S 秒
# M 分
# H 小時
# D 天
# 'W0'-'W6' 每星期(interval=0時代表星期一:W0)
# midnight 每天凌晨
th.setFormatter(format_str) # 設(shè)置文件里寫入的格式
self.logger.addHandler(sh) # 把對象加到logger里
self.logger.addHandler(th)
# 測試
if __name__ == '__main__':
logger = Logger('./logs/2020/app.log', 'debug', 'S', 5).logger
logger.debug('debug')
logger.info('info')
logger.warning('警告')
logger.error('報錯')
logger.critical('嚴(yán)重')
# 單獨(dú)記錄error
err_logger = Logger('./logs/2020/error.log', 'error', 'S', 3).logger
err_logger.error('錯誤 error')

為了測試方便,我們將時間間隔設(shè)為秒(按秒自動命名分割文件),多運(yùn)行幾次后,會按照配置文件數(shù)量將多余的日志文件自動刪除,保留如上圖中的日志文件。
原文鏈接:https://beltxman.com/3195.html,若無特殊說明本站內(nèi)容為行星帶原創(chuàng),未經(jīng)同意禁止轉(zhuǎn)載!
總結(jié)
到此這篇關(guān)于Python中l(wèi)ogging日志記錄到文件及自動分割的文章就介紹到這了,更多相關(guān)python logging日志記錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于pycharm?python3.7成功安裝dlib庫的問題
這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫的解決方法,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
Python時間戳與日期格式之間相互轉(zhuǎn)化的詳細(xì)教程
java默認(rèn)精度是毫秒級別的,生成的時間戳是13位,而python默認(rèn)是10位的,精度是秒,下面這篇文章主要給大家介紹了關(guān)于Python時間戳與日期格式之間相互轉(zhuǎn)化的相關(guān)資料,需要的朋友可以參考下2022-08-08
Python使用socket實(shí)現(xiàn)組播與發(fā)送二進(jìn)制數(shù)據(jù)
在工作中經(jīng)常會用到socket傳輸數(shù)據(jù),例如客戶端給服務(wù)器發(fā)送數(shù)據(jù)(雙方約定了數(shù)據(jù)格式),本文主要介紹了Python使用socket實(shí)現(xiàn)組播與發(fā)送二進(jìn)制數(shù)據(jù),感興趣的可以了解一下2021-06-06
Python如何使用隊列方式實(shí)現(xiàn)多線程爬蟲
這篇文章主要介紹了Python如何使用隊列方式實(shí)現(xiàn)多線程爬蟲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Queue隊列中join()與task_done()的關(guān)系及說明
這篇文章主要介紹了Queue隊列中join()與task_done()的關(guān)系及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
在Python中使用swapCase()方法轉(zhuǎn)換大小寫的教程
這篇文章主要介紹了在Python中使用swapCase()方法轉(zhuǎn)換大小寫的教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
Python如何實(shí)現(xiàn)小程序 無限求和平均
這篇文章主要介紹了python如何實(shí)現(xiàn)小程序 無限求和平均,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02

