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