python打印日志,同时保存在文件(解决log重复打印问题)

该博客介绍了一个Python日志管理方案,用于在启动服务时同时在终端和日志文件中记录信息,避免重复打印。通过`init_logger`模块提供的`Logger`类,可以在多个.py文件中方便地导入并使用,确保日志记录的统一和有效管理。
摘要由CSDN通过智能技术生成

1. 需求

  • 启动服务时,在终端打印日志
  • 同时将日志保存在文件
  • 还需要解决重复打印的问题

2. 代码

import os
import logging


LOG_FILE = 'log/my.log'
if not os.path.exists(os.path.dirname(LOG_FILE)):
    os.makedirs(os.path.dirname(LOG_FILE))


# """
# $ Usage:
#     from init_logger import Logger
#     logger = Logger(__name__).get_log()
# """


class Logger:
    def __init__(self, logger=None, level=logging.INFO):
        self.logger = logging.getLogger(logger)
        self.logger.propagate = False  # 防止终端重复打印
        self.logger.setLevel(level)
        fh = logging.FileHandler(LOG_FILE, 'a', encoding='utf-8')
        fh.setLevel(level)
        sh = logging.StreamHandler()
        sh.setLevel(level)
        formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
        fh.setFormatter(formatter)
        sh.setFormatter(formatter)
        self.logger.handlers.clear()
        self.logger.addHandler(fh)
        self.logger.addHandler(sh)
        fh.close()
        sh.close()

    def get_log(self):
        return self.logger

3. 使用

在不同的.py文件里使用,例如现在有a.py、b.py,则分别在文件里使用,如下所示:

  • 在a.py文件:
from init_logger import Logger
logger = Logger(__name__).get_log()  # 这里不用加__name__好像也可以

# 记录信息
logger.info('xxx')

  • 在b.py文件:
from init_logger import Logger
logger = Logger(__name__).get_log()  # 这里不用加__name__好像也可以

# 记录信息
logger.info('xxx')

ps: 踩了好多坑-_-||

结束。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值