佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > python (logging) 日志按日期、大小回滾的操作

python (logging) 日志按日期、大小回滾的操作

熱門標(biāo)簽:Win7旗艦版 硅谷的囚徒呼叫中心 百度AI接口 語音系統(tǒng) 企業(yè)做大做強(qiáng) 客戶服務(wù) 呼叫中心市場(chǎng)需求 電話運(yùn)營(yíng)中心

描述: 日志按日期、大小回滾

代碼:

# -*- coding: utf-8 -*-
import os
import logging.handlers 
log_dir = os.path.dirname(os.path.abspath(__file__)) + os.sep + 'logs' 
if not os.path.isdir(log_dir):
 os.makedirs(log_dir) 
# CONSTANT VARIABLES 
MODULE_NAME = 'my_module'
LOG_LEVEL = 'INFO' 
def get_logger(module_name=MODULE_NAME, log_level=LOG_LEVEL): 
 logging.basicConfig() 
 logger = logging.getLogger(module_name) 
 logger.setLevel(log_level)
 
 # # 按時(shí)間回滾 1天換1次, 保留180天
 # time_file_handler = logging.handlers.TimedRotatingFileHandler(
 # log_dir + os.sep + module_name + '_day.log',
 # when='midnight',
 # interval=1,
 # backupCount=180
 # )
 #
 # time_file_handler.suffix = '%Y-%m-%d.log' # 按 天 
 time_file_handler = logging.handlers.TimedRotatingFileHandler(
 log_dir + os.sep + module_name + '_sec.log',
 when='S',
 interval=1,
 backupCount=180
 ) 
 time_file_handler.suffix = '%Y-%m-%d_%H-%M-%S.log' # 按 秒
 formatter = logging.Formatter('[%(asctime)s]-[%(filename)s]-[%(funcName)s]-[%(lineno)d]-12s: [%(levelname)s]-8s>> %(message)s')
 time_file_handler.setFormatter(formatter) 
 logger.addHandler(time_file_handler)
 
 # # 按大小回滾
 # file_size_handler = logging.handlers.RotatingFileHandler(
 # log_dir + os.sep + module_name + 'size.log',
 # maxBytes=1024,
 # backupCount=1000,
 # )
 # file_size_handler.setFormatter(formatter)
 # logger.addHandler(file_size_handler) 
 return logger 
if __name__ == '__main__':
 logger = get_logger()
 logger.info('hello')

輸出:

(1) 日志:

[2019-12-21 14:12:44,682]-[paper4_logging.py]-[module>]-[59]-12s: [INFO]-8s>> hello

(2) 目錄:

2019/12/21 周六 14:12 86 my_module_sec.log

2019/12/21 周六 14:12 86 my_module_sec.log.2019-12-21_14-12-15.log

2019/12/21 周六 14:12 86 my_module_sec.log.2019-12-21_14-12-35.log

2019/12/21 周六 14:12 86 my_module_sec.log.2019-12-21_14-12-38.log

補(bǔ)充:python中用logging實(shí)現(xiàn)日志滾動(dòng)和過期日志刪除

logging庫提供了兩個(gè)可以用于日志滾動(dòng)的class,一個(gè)是RotatingFileHandler,它主要是根據(jù)日志文件的大小進(jìn)行滾動(dòng),另一個(gè)是TimeRotatingFileHandler,它主要是根據(jù)時(shí)間進(jìn)行滾動(dòng)。

在實(shí)際應(yīng)用中,我們通常根據(jù)時(shí)間進(jìn)行滾動(dòng),因此,本文中主要介紹TimeRotaingFileHandler的使用方法(RotatingFileHandler一樣)。

代碼示例如下:

#!/usr/bin/env python
#_*_coding:utf-8_*_
# vim : set expandtab ts=4 sw=4 sts=4 tw=100 :
import logging
import time
import re
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler
def main():
 #日志打印格式
 log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
 formatter = logging.Formatter(log_fmt)
 #創(chuàng)建TimedRotatingFileHandler對(duì)象
 log_file_handler = TimedRotatingFileHandler(filename="ds_update", when="M", interval=2, backupCount=2)
 #log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
 #log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
 log_file_handler.setFormatter(formatter) 
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger()
 log.addHandler(log_file_handler)
 #循環(huán)打印日志
 log_content = "test log"
 count = 0
 while count  30:
 log.error(log_content)
 time.sleep(20)
 count = count + 1
 log.removeHandler(log_file_handler)
if __name__ == "__main__":
 main()

filename:日志文件名的prefix;

when:是一個(gè)字符串,用于描述滾動(dòng)周期的基本單位,字符串的值及意義如下:

“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

interval:滾動(dòng)周期,單位有when指定,比如:when='D',interval=1,表示每天產(chǎn)生一個(gè)日志文件;

backupCount:表示日志文件的保留個(gè)數(shù);

除了上述參數(shù)之外,TimedRotatingFileHandler還有兩個(gè)比較重要的成員變量,它們分別是suffix和extMatch。

suffix是指日志文件名的后綴,suffix中通常帶有格式化的時(shí)間字符串,filename和suffix由“.”連接構(gòu)成文件名(例如:filename=“runtime”, suffix=“%Y-%m-%d.log”,生成的文件名為runtime.2015-07-06.log)。

extMatch是一個(gè)編譯好的正則表達(dá)式,用于匹配日志文件名的后綴,它必須和suffix是匹配的,如果suffix和extMatch匹配不上的話,過期的日志是不會(huì)被刪除的。

比如,suffix=“%Y-%m-%d.log”, extMatch的只應(yīng)該是re.compile(r”^\d{4}-\d{2}-\d{2}.log$”)。

默認(rèn)情況下,在TimedRotatingFileHandler對(duì)象初始化時(shí),suffxi和extMatch會(huì)根據(jù)when的值進(jìn)行初始化:

‘S': suffix=”%Y-%m-%d_%H-%M-%S”, extMatch=r”\^d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}”;
‘M':suffix=”%Y-%m-%d_%H-%M”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}”;
‘H':suffix=”%Y-%m-%d_%H”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}”;
‘D':suffxi=”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;
‘MIDNIGHT':”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;
‘W':”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

如果對(duì)日志文件名沒有特殊要求的話,可以不用設(shè)置suffix和extMatch,如果需要,一定要讓它們匹配上。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 解決python logging遇到的坑 日志重復(fù)打印問題
  • python 實(shí)現(xiàn)logging動(dòng)態(tài)變更輸出日志文件名
  • Python日志打印里logging.getLogger源碼分析詳解
  • python 如何對(duì)logging日志封裝
  • Python logging自定義字段輸出及打印顏色
  • Python中l(wèi)ogging日志的四個(gè)等級(jí)和使用
  • Python+logging輸出到屏幕將log日志寫入文件
  • Python logging模塊handlers用法詳解
  • 如何理解python接口自動(dòng)化之logging日志模塊

標(biāo)簽:長(zhǎng)沙 崇左 濟(jì)南 安康 山西 海南 山西 喀什

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python (logging) 日志按日期、大小回滾的操作》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    平罗县| 伊春市| 江口县| 乐平市| 阳朔县| 资阳市| 巴青县| 双鸭山市| 麻江县| 长泰县| 山东| 雅安市| 揭西县| 喀喇沁旗| 襄樊市| 麻阳| 泰安市| 夹江县| 湟中县| 交口县| 武义县| 潮安县| 宜阳县| 石门县| 岳阳市| 仪陇县| 安塞县| 龙岩市| 兰溪市| 乾安县| 长阳| 石阡县| 松江区| 澄江县| 富宁县| 建始县| 石柱| 涡阳县| 松滋市| 桃江县| 安多县|