trans_log.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2024/5/16
  3. # @Author : 魏志亮
  4. import datetime
  5. import logging
  6. import os
  7. import sys
  8. def set_trance_id(trace_id):
  9. """设置当前线程的链路ID"""
  10. os.environ['trace_id'] = trace_id
  11. class ContextFilter(logging.Filter):
  12. """一个自定义的日志过滤器,用于在日志记录中添加链路ID"""
  13. def filter(self, record):
  14. record.trace_id = ''
  15. if 'trace_id' in os.environ.keys():
  16. record.trace_id = os.environ['trace_id']
  17. return True
  18. logger = logging.getLogger("etl_tools")
  19. logger.setLevel(logging.INFO)
  20. stout_handle = logging.StreamHandler(sys.stdout)
  21. stout_handle.setFormatter(
  22. logging.Formatter("%(asctime)s-%(trace_id)s-%(levelname)s-%(filename)-8s:%(lineno)s: %(message)s"))
  23. stout_handle.setLevel(logging.INFO)
  24. stout_handle.addFilter(ContextFilter())
  25. logger.addHandler(stout_handle)
  26. log_path = r'/data/logs/etl_tools_' + (os.environ['env'] if 'env' in os.environ else 'dev')
  27. file_path = os.path.join(log_path)
  28. if not os.path.exists(file_path):
  29. os.makedirs(file_path, exist_ok=True)
  30. file_name = file_path + os.sep + str(datetime.date.today()) + '.log'
  31. file_handler = logging.FileHandler(file_name, encoding='utf-8')
  32. file_handler.setFormatter(
  33. logging.Formatter("%(asctime)s-%(trace_id)s-%(levelname)s-%(filename)-8s:%(lineno)s: %(message)s"))
  34. file_handler.setLevel(logging.INFO)
  35. file_handler.addFilter(ContextFilter())
  36. logger.addHandler(file_handler)
  37. def trans_print(*args):
  38. logger.info(" ".join([str(a) for a in args]))