logs_handler.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # @description:
  2. # @author: licanglong
  3. # @date: 2025/11/20 14:05
  4. import logging
  5. import os
  6. import sys
  7. from concurrent_log import ConcurrentTimedRotatingFileHandler
  8. from app.core import ColorConsoleFormatter, CTX, EM
  9. from app.handler import ApplicationStartupEvent
  10. _log = logging.getLogger(__name__)
  11. custom_stream_handler = logging.StreamHandler()
  12. if not getattr(sys, 'frozen', False): # 开发环境
  13. custom_stream_handler.setFormatter(ColorConsoleFormatter())
  14. # 确保日志路径
  15. logging.basicConfig(
  16. level=logging.INFO,
  17. format="{asctime} {levelname:>7} {threadName:^10} [{filename}#{funcName}:{lineno}]: {message}",
  18. style="{",
  19. encoding='utf-8',
  20. handlers=[custom_stream_handler]
  21. )
  22. @EM.subscribe(ApplicationStartupEvent, priority=sys.maxsize - 1)
  23. def init_logger_onstartup(event: ApplicationStartupEvent):
  24. """加载并初始化配置"""
  25. log_handlers = []
  26. logpath = CTX.ENV.getprop('log.path', CTX.DEFAULT_LOG_FILE)
  27. custom_stream_handler = logging.StreamHandler()
  28. if getattr(sys, 'frozen', False): # 打包后的环境
  29. log_path = os.path.join(os.path.dirname(sys.executable), logpath)
  30. else: # 开发环境
  31. custom_stream_handler.setFormatter(ColorConsoleFormatter())
  32. log_path = os.path.join(os.getenv('APP_PATH'), logpath)
  33. if not os.path.exists(os.path.dirname(log_path)):
  34. os.makedirs(os.path.dirname(log_path), exist_ok=True)
  35. log_handlers.append(custom_stream_handler)
  36. file_handler = ConcurrentTimedRotatingFileHandler(
  37. filename=log_path,
  38. when='midnight', # 每天午夜切割
  39. backupCount=30, # 保留最近30天的日志
  40. encoding='utf-8',
  41. )
  42. _log.info(f"日志文件路径:{log_path}")
  43. log_handlers.append(file_handler)
  44. # loki_domain = _APP.ENV.get("log.loki.domain")
  45. # if loki_domain:
  46. # import logging_loki
  47. # loki_handler = logging_loki.LokiHandler(
  48. # url=loki_domain + "/loki/api/v1/push",
  49. # tags={"application": _APP.ENV.get("log.loki.app-name", "paddleocr-service")},
  50. # # auth=("username", "password"),
  51. # version="2",
  52. # )
  53. # logging.getLogger("urllib3").propagate = False
  54. # logging.getLogger("requests").propagate = False
  55. # log_handlers.append(loki_handler)
  56. # 确保日志路径
  57. logging.basicConfig(
  58. level=CTX.ENV.getprop('log.level', logging.DEBUG),
  59. format="{asctime} {levelname:>7} {threadName:^10} [{filename}#{funcName}:{lineno}]: {message}",
  60. style="{",
  61. encoding='utf-8',
  62. handlers=log_handlers,
  63. force=True
  64. )
  65. _log.info(f"日志级别:{logging.getLevelName(logging.getLogger().level)}")