神奇的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级别

(3) 使用方法

  • 输出消息至终端
#!/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

猜你喜欢

转载自blog.csdn.net/absinjun/article/details/81356750