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

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: 踩了好多坑-_-||

结束。

猜你喜欢

转载自blog.csdn.net/weixin_43508499/article/details/123913458