logger.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding:utf-8 -*-
  2. """
  3. @author: isaacqyang
  4. @time: 2022/8/29
  5. @desc:
  6. """
  7. import datetime
  8. import logging
  9. import logging.handlers
  10. import os
  11. import threading
  12. import time
  13. from os.path import dirname, realpath
  14. import pytz
  15. def my_time(*args):
  16. return time.strptime(datetime.datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S"),
  17. "%Y-%m-%d %H:%M:%S")
  18. _instance_lock = threading.Lock()
  19. logger_map = {}
  20. def get_logger(logger_name: str = None) -> logging.Logger:
  21. if logger_name is None:
  22. logger_name = "mylog"
  23. if logger_name in logger_map.keys():
  24. return logger_map.get(logger_name)
  25. with _instance_lock:
  26. if logger_name in logger_map.keys():
  27. return logger_map.get(logger_name)
  28. _logger = logging.Logger(logger_name)
  29. _logger.setLevel(logging.INFO)
  30. formatter = logging.Formatter(
  31. "[%(asctime)s] [%(levelname)s] [%(threadName)s] [%(filename)s] [func:%(funcName)s line:%(lineno)d]\n %(message)s")
  32. formatter.converter = my_time
  33. log_path = os.path.join(dirname(dirname(realpath(__file__))), "logs")
  34. filename = os.path.join(log_path, f"{logger_name}.log")
  35. if not os.path.exists(dirname(filename)):
  36. os.makedirs(dirname(filename))
  37. handler = logging.handlers.TimedRotatingFileHandler(filename, when="MIDNIGHT", interval=7, backupCount=4,
  38. encoding="utf8", atTime=datetime.time(0, 0, 0, 0))
  39. console_handler = logging.StreamHandler()
  40. print(f"日志路径:{filename}")
  41. handler.setFormatter(formatter)
  42. console_handler.setFormatter(formatter)
  43. _logger.addHandler(handler)
  44. _logger.addHandler(console_handler)
  45. logger_map[logger_name] = _logger
  46. return _logger