# -*- coding:utf-8 -*- """ @author: isaacqyang @time: 2022/8/29 @desc: """ import datetime import logging import logging.handlers import os import threading import time from os.path import dirname, realpath import pytz def my_time(*args): return time.strptime(datetime.datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S"), "%Y-%m-%d %H:%M:%S") _instance_lock = threading.Lock() logger_map = {} def get_logger(logger_name: str = None) -> logging.Logger: if logger_name is None: logger_name = "mylog" if logger_name in logger_map.keys(): return logger_map.get(logger_name) with _instance_lock: if logger_name in logger_map.keys(): return logger_map.get(logger_name) _logger = logging.Logger(logger_name) _logger.setLevel(logging.INFO) formatter = logging.Formatter( "[%(asctime)s] [%(levelname)s] [%(threadName)s] [%(filename)s] [func:%(funcName)s line:%(lineno)d]\n %(message)s") formatter.converter = my_time log_path = os.path.join(dirname(dirname(realpath(__file__))), "logs") filename = os.path.join(log_path, f"{logger_name}.log") if not os.path.exists(dirname(filename)): os.makedirs(dirname(filename)) handler = logging.handlers.TimedRotatingFileHandler(filename, when="MIDNIGHT", interval=7, backupCount=4, encoding="utf8", atTime=datetime.time(0, 0, 0, 0)) console_handler = logging.StreamHandler() print(f"日志路径:{filename}") handler.setFormatter(formatter) console_handler.setFormatter(formatter) _logger.addHandler(handler) _logger.addHandler(console_handler) logger_map[logger_name] = _logger return _logger