import logging
from logging import handlers
from api.tools.handle_path import log_dir_name
class MyLogger:
"""
1、日志记录用户行为
2、理论上要能够根据日志输出,定位到bug
3、不要输出敏感信息在日志里面:账号、密码、身份证、银行卡等
4、使用场景:需要print的地方都可以用log进行替换
5、通过日志能够知道整个执行过程中哪里报错了,就可以了(异常处理),需要将系统的报错信息收集到日志中,方便日后排查问题,找出原因
"""
@classmethod
def create_log(cls):
"""创建日志收集器"""
# 1、创建一个log日志收集器
my_log = logging.getLogger("my_log")
# 2、创建一个输出渠道,输出到控制台的日志
stream_handler = logging.StreamHandler() # 控制台
# 创建一个handler,用于写入日志文件(本地存储) when="D", interval=1 设置日志频率为1天
file_handler = handlers.TimedRotatingFileHandler(filename=log_dir_name, when="D", interval=1, encoding='utf-8')
# 3、设置日志的格式
formatter = logging.Formatter(
'%(asctime)s-[%(filename)s—->line:%(lineno)d] - %(name)s:%(levelname)s:%(message)s')
# 4、渠道绑定日志格式,设置输出到控制台的格式
stream_handler.setFormatter(fmt=formatter)
file_handler.setFormatter(formatter)
# 日志收集器设置日志级别
my_log.setLevel(level=logging.DEBUG)
stream_handler.setLevel("INFO") # 渠道的日志级别
file_handler.setLevel('DEBUG')
# 日志收集器绑定渠道
my_log.addHandler(file_handler)
my_log.addHandler(stream_handler)
return my_log
# 创建日志对象,用于外部调用
my_log = MyLogger.create_log()
if __name__ == '__main__':
my_log.info("This is an info message")