python日志封装成一个类(2023年2月)

写这篇文章的背景:

一个复杂并且运行时间很长的程序,如果你没有用日志记录运行的信息。一旦出错,根据错误信息,你可能无法复现当时的情况。在程序运行过程中记录好运行信息尤为重要

将日志封装成一个类

代码如下文件名为get_logger.py,所有说明看注释、看注释、看注释。这个类我一直在生产环境中使用,没出错过,可以直接复制过去使用。如果有不明白的地方,参考logger官网:https://docs.python.org/zh-cn/3/howto/logging.html#logging-basic-tutorial

import logging
import logging.handlers
import datetime
import os

def get_logger(level_name, log_dir, log_name='api_logger'):
    # 创建目录
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    logger = logging.getLogger(log_name)
    if len(logger.handlers)>0:
        # 已经创建过,直接返回
        return logger
    logger.setLevel(logging._nameToLevel[level_name])

    rf_handler = logging.handlers.TimedRotatingFileHandler(
        os.path.join(log_dir, 'all.log'), 
        when='midnight', 
        interval=1, 
        backupCount=7, 
        atTime=datetime.time(0, 0, 0, 0),
        encoding='utf-8'
        )
    rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

    f_handler = logging.FileHandler(os.path.join(log_dir, 'error.log'))
    f_handler.setLevel(logging.ERROR)
    f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

    s_handler = logging.StreamHandler()
    s_handler.setLevel(logging.DEBUG)
    s_handler.setFormatter(logging.Formatter("%(asctime)s[%(levelname)s]:%(message)s"))

    logger.addHandler(rf_handler)
    logger.addHandler(f_handler)
    logger.addHandler(s_handler)
    return logger

如何使用上面那个类

如果你有一个程序文件main.py

from get_logger import get_logger

logger_man = get_logger(
		level_name = 'DeBug',  # 日志等级
		log_dir = './path',   # 日志文件存放的目录
		log_name='api_logger'  # 这个日志对象的名字,相同名字的日志对象会将信息写到一块
)

class DoSomething():
	def work(self):
		# 做一些事情1,然后你将过程日志记录下来
		logger_man.warning('日志信息')  # 这里的logger_man就是上面我们创建的日志实例
		# 做一些事情2
		pass
		return None

这样子就可以把程序所有的过程信息记录下来了。

创建这个类是自定义创建的,当然如果你是logger高手,你可以改我的类,如果不是的话,这个类定义的功能够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值