python logging 学习

该文介绍了Python的logging模块,展示了如何实现日志输出到屏幕和文件,以及如何自定义日志格式。文中提供了一个名为mylogger.py的工具类,用于简化日志配置,支持设置日志级别、文件滚动和时间间隔。在demo2.py中演示了使用mylogger.py生成不同级别日志的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值