1、学习资料
python logging 学习参考如下:
python + logging 实现日志输出及保存到文件
原文链接:https://blog.csdn.net/Runner1st/article/details/96481954
Python + logging 输出到屏幕,将log日志写入文件
https://www.cnblogs.com/nancyzhu/p/8551506.html
日志的输出格式 format 参数配置:
%(name)s:Logger的名字
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
2、logging 工具类
mylogger.py
代码如下:
import logging
from logging import handlers
class Logger(object):
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'crit': logging.CRITICAL
} # 日志级别关系映射
default_fmt = '%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
default_fmt2 = '%(asctime)s - %(filename)s - %(levelname)s: %(message)s'
default_fmt3 = '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
default_fmt4 = '%(asctime)s - %(pathname)s - %(levelname)s: %(message)s'
def __init__(self, filename, level='info', when='D', backCount=10, fmt=default_fmt2):
self.logger = logging.getLogger(filename)
self.logger.setLevel(self.level_relations.get(level)) # 设置日志级别
formatter = logging.Formatter(fmt) # 设置日志格式
handler = logging.StreamHandler() # 往屏幕上输出
handler.setFormatter(formatter) # 设置屏幕上显示的格式
# 实例化 TimedRotatingFileHandler
# interval 是时间间隔,
# backupCount 是备份文件的个数,如果超过这个个数,就会自动删除,
# when 是间隔的时间单位,单位有以下几种:
# S 秒
# M 分
# H 小时、
# D 天、
# W 每星期(interval==0时代表星期一)
# midnight 每天凌晨
handler2 = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount,
encoding='utf-8') # 往文件里写入#指定间隔时间自动生成文件的处理器
handler2.setFormatter(formatter) # 设置文件里写入的格式
self.logger.addHandler(handler)
self.logger.addHandler(handler2)
使用示例:
demo2.py
代码如下:
from mylogger import Logger
if __name__ == '__main__':
log = Logger('all.log',level='debug')
log.logger.debug('debug')
log.logger.info('info')
log.logger.warning('警告')
log.logger.error('报错')
log.logger.critical('严重')
# 定义不同级别的日志
Logger('error.log', level='error').logger.error('error 测试 log')
运行日志:
2023-04-20 13:28:20,193 - demo2.py - DEBUG: debug
2023-04-20 13:28:20,194 - demo2.py - INFO: info
2023-04-20 13:28:20,194 - demo2.py - WARNING: 警告
2023-04-20 13:28:20,194 - demo2.py - ERROR: 报错
2023-04-20 13:28:20,194 - demo2.py - CRITICAL: 严重
2023-04-20 13:28:20,195 - demo2.py - ERROR: error 测试 log