神奇的python(四)之logging日志文件系统

(1) 简介

日志调试输出信息
日志级别: critical > error > warning > info > debug,notset 级别越高打印的日志越少,反之亦然,即
debug : 打印全部的日志(notset等同于debug)
info : 打印info,warning,error,critical级别的日志
warning : 打印warning,error,critical级别的日志
error : 打印error,critical级别的日志
critical : 打印critical级别

(2) 使用方法

  • 输出消息至终端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至终端

import logging
import os

logger_fmt ='%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')   #输出路径及路径名
formatter = logging.Formatter(logger_fmt)  #输出格式
	
logger_console_handler = logging.StreamHandler()    #输出到终端
logger_console_handler.setFormatter(formatter)   # 设置输出格式

logger = logging.getLogger() 
if not len(logger.handlers):
    logger.addHandler(logger_console_handler)       
else:
    logger.removeHandler(logger_console_handler)
logger.setLevel(logging.INFO)   #设置输出级别


logger.debug('StartBoot')  
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
  • 输出消息至文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至指定路径

import logging
import os


logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log') #存储路径(路径名要正确)
print(Logneme)
formatter = logging.Formatter(logger_fmt)
logger_file_handler = logging.FileHandler(Logneme)
logger_file_handler.setFormatter(formatter)

logger = logging.getLogger()
if not len(logger.handlers):
    logger.addHandler(logger_file_handler)
else:
    logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO) 

logger.debug('StartBoot')  
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
  • 输出消息至文件并定期(每天)删除
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至文件并定期(每天)删除

import logging
import os
import re
from logging.handlers import TimedRotatingFileHandler

logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = TimedRotatingFileHandler(filename=Logneme, when='MIDNIGHT', interval=1, backupCount=2) 
logger_file_handler.suffix = "%Y-%m-%d.log"
logger_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
logger_file_handler.setFormatter(formatter)

logger = logging.getLogger()
if not len(logger.handlers):
    logger.addHandler(logger_file_handler)
else:
    logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO)

logger.debug('StartBoot')  
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')

&1)TimedRotatingFileHandler()
功能:用于定期删除日志文件
参数:
filename: 文件名
when: ‘W’, ‘D’, ‘H’, ‘M’, ‘S’, ‘MIDNIGHT’ 分别代表’周’,‘天’,‘时’,‘分’,‘秒’
interval: 时间间隔
backupCount:日志数目
比如,我上面的例子即是每隔一天产生一个日志,超过两个日志将覆盖旧的日志

&2)logger_file_handler.suffix
功能:在日志名后加上后缀

&3)logger_file_handler.extMatch
功能:匹配日志名的后缀

注意:想要实现周期性删除任务,这三个函数都是必要的

  • 输出消息至文件超过指定大小删除
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至文件并文件超过指定大小清零

import logging
import os
from logging.handlers import RotatingFileHandler

logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = RotatingFileHandler(filename=Logneme, maxBytes = 1*1024, backupCount=2) 
logger_file_handler.setFormatter(formatter)

logger = logging.getLogger()
if not len(logger.handlers):
    logger.addHandler(logger_file_handler)
else:
    logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO)

logger.debug('StartBoot')  
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
  • 终极版:可输出日志到终端并且输出到文件且文件定期删除

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 终极版:可输出日志到终端并且输出到文件且文件定期删除

import logging
import os
import re
from logging.handlers import TimedRotatingFileHandler

logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = TimedRotatingFileHandler(filename=Logneme, when='MIDNIGHT', interval=1, backupCount=2)
logger_file_handler.suffix = "%Y-%m-%d.log"
logger_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
logger_file_handler.setFormatter(formatter)

logger_console_handler = logging.StreamHandler()
logger_console_handler.setFormatter(formatter)

logger = logging.getLogger()
if not len(logger.handlers):
    logger.addHandler(logger_file_handler)
    logger.addHandler(logger_console_handler)
else:
    logger.removeHandler(logger_file_handler)
    logger.removeHandler(logger_console_handler)
logger.setLevel(logging.INFO)

logger.debug('StartBoot')  
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')

以下隐藏内容为源代码,有需求可以下载,当作是对本站的支持,谢谢。

参考源码下载:https://download.csdn.net/download/absinjun/10579005
[erphpdown]解压密码:ZMJPY123[/erphpdown]

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值