python:日志输出信息模块logging

1、日志记录器logging

在python中,通常使用logging模块管理日志信息。首先,创建logger日志记录器,主要负责生成日志消息。

import logging
import re
from logging.handlers import TimedRotatingFileHandler

# 创建日志记录器,传入日志文件名字
logger = logging.getLogger(log_name)

# 创建日志文件的保存目录
log_dir = "./logs"
log_path= os.path.join(log_dir,log_name)
if not os.path.exists(log_dir'):
    os.makedirs(log_dir")

# 设置日志级别,如DEBUG、INFO、WARNING、ERROR 和 CRITICAL。
logger.setLevel(logging.INFO)

2、日志管理器Handlers

在logging模块中,handlers 是日志记录管理中的一个常用工具,负责将日志消息输出到不同的目标,如控制台、文件、网络等。
常见的处理器包括 StreamHandler(输出到控制台)和 HTTPHandler(发送到 Web 服务器)等。其中,TimedRotatingFileHandler处理器可以帮助你管理日志大小,生成和删除,主要包含以下两部分功能,

  • 时间间隔轮换: 按照设定的时间间隔自动创建新的日志文件。
  • 备份文件数量: 保留指定数量的旧日志文件,删除超出的文件。
from logging.handlers import TimedRotatingFileHandler

# 创建日志管理器
file_handler = TimedRotatingFileHandler(
    filename=log_path, when="MIDNIGHT", 
    interval=1, backupCount=30
)
# filename 要写入的日志文件路径
# when 指定轮换的时间间隔单位。可以是以下值之一:
	'S':秒
	'M':分钟
	'H':小时
	'D':天
	'W0''W6':每周的特定一天(0代表星期一,6代表星期日)
	'midnight':午夜(即每天的00:00# interval 指定轮换的时间间隔数,和when 参数一起使用:
	例如,如果 when='H'和 interval=1,日志文件每小时轮换一次。
# backupCount  保留的旧日志文件数量

# 设置保留的旧日志文件名字格式,如log_name.2024-12-09.log
file_handler.suffix = "%Y-%m-%d.log"

# 添加日志管理器到日志记录器
logger.addHandler(file_handler)

# 正则表达式,用于匹配日志文件名后; 需要注意的是suffix和extMatch一定要匹配上,如果不匹配,过期日志不会被删除。
file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")

3、日志格式化器Formatter

logging通过 logging.Formatter 设置格式化器,定义日志消息的格式,通常包括时间、日志级别、消息等。

# 设置日志格式,创建格式化器
formatter = logging.Formatter(
        "[%(asctime)s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s (%(filename)s:%(lineno)d) - %(message)s"
    )
)
# 其中,参数详解,主要用来定位问题: 
# %(asctime)s,日志记录时间的字符串表示。
# %(process)d,日志记录时的进程ID(PID)。
# %(levelname)s,日志的级别名称,如DEBUG、INFO、WARNING、ERROR等。
# %(module)s,日志记录来自的模块名,不包括文件扩展名。
# %(funcName)s,日志记录时的函数名。
# %(filename)s,日志记录所在的文件名,包括文件扩展名。
# %(lineno)d,日志记录所在的行号,是一个整数。
# %(message)s,日志记录的实际消息内容。

# 将格式化器添加到日志处理器中
file_handler.setFormatter(formatter)

4、日志记录

初始化日志记录器,管理器和格式化器后,就可直接在你的核心代码中添加任何你想记录的信息。比较常见的日志级别:

  • logger.info(‘This is an infomessage’)
  • logger.warning(‘This is a warning message’)
  • logger.error(‘This is an error message’)
  • logger.critical(‘This is a critical message’)
  • logger.debug(‘This is a debug message’)

完整代码,包含日志记录器,管理器,格式化器

import logging
import re
from logging.handlers import TimedRotatingFileHandler

# 创建日志记录器,传入日志文件名字
logger = logging.getLogger(log_name)

# 创建日志文件的保存目录
log_dir = "./logs"
log_path= os.path.join(log_dir,log_name)
if not os.path.exists(log_dir'):
    os.makedirs(log_dir")

# 设置日志级别INFO
logger.setLevel(logging.INFO)

# 创建日志文件管理器
file_handler = TimedRotatingFileHandler(
    filename=log_path, when="MIDNIGHT", interval=1, backupCount=30
)

# 设置保留的旧日志文件名字格式,如log_name.2024-12-09.log
file_handler.suffix = "%Y-%m-%d.log"

# 正则表达式,用于匹配日志文件名后; 需要注意的是suffix和extMatch一定要匹配上,如果不匹配,过期日志不会被删除。
file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")

# 定义日志输出格式
file_handler.setFormatter(
    logging.Formatter(
        "[%(asctime)s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s (%(filename)s:%(lineno)d) - %(message)s"
    )
)
# 将日志管理器添加到日志记录器
logger.addHandler(file_handler)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值