logger.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. from commom.traceId_util import TraceIdFilter
  16. def my_time(*args):
  17. return time.strptime(datetime.datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S"),
  18. "%Y-%m-%d %H:%M:%S")
  19. _instance_lock = threading.Lock()
  20. logger_map = {}
  21. def get_logger(logger_name: str = None) -> logging.Logger:
  22. if logger_name is None:
  23. logger_name = "app"
  24. if logger_name in logger_map.keys():
  25. return logger_map.get(logger_name)
  26. with _instance_lock:
  27. if logger_name in logger_map.keys():
  28. return logger_map.get(logger_name)
  29. _logger = logging.Logger(logger_name)
  30. _logger.setLevel(logging.INFO)
  31. _logger.addFilter(TraceIdFilter())
  32. formatter = logging.Formatter(
  33. '[%(asctime)s] [requestId-%(requestId)s] [%(levelname)s] [%(threadName)s] [%(filename)s] [func:%(funcName)s line:%(lineno)d]\n %(message)s')
  34. formatter.converter = my_time
  35. log_path = os.path.join(dirname(dirname(realpath(__file__))), "logs")
  36. filename = os.path.join(log_path, f"{logger_name}.log")
  37. if not os.path.exists(dirname(filename)):
  38. os.makedirs(dirname(filename))
  39. print(f"日志路径:{filename}")
  40. handler = logging.handlers.TimedRotatingFileHandler(filename, when="MIDNIGHT", interval=30, backupCount=4,
  41. encoding="utf8", atTime=datetime.time(0, 0, 0, 0))
  42. handler.setFormatter(formatter)
  43. _logger.addHandler(handler)
  44. console_handler = logging.StreamHandler()
  45. console_handler.setFormatter(formatter)
  46. _logger.addHandler(console_handler)
  47. logger_map[logger_name] = _logger
  48. return _logger