logger.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import logging
  2. import sys
  3. # 定义一个全局的日志格式
  4. LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
  5. def setup_logging():
  6. """
  7. 配置日志系统,使其同时输出到文件和控制台。
  8. 这个函数应该在应用程序启动时只调用一次。
  9. """
  10. # 获取根日志记录器
  11. root_logger = logging.getLogger()
  12. root_logger.setLevel(logging.INFO) # 设置根日志记录器的级别
  13. # 如果已经有处理器,先清空,防止重复添加
  14. if root_logger.hasHandlers():
  15. root_logger.handlers.clear()
  16. # 创建一个通用的格式化器
  17. formatter = logging.Formatter(LOG_FORMAT)
  18. # 1. 创建控制台处理器 (StreamHandler)
  19. # - 将日志输出到标准输出(您的终端)
  20. console_handler = logging.StreamHandler(sys.stdout)
  21. console_handler.setFormatter(formatter)
  22. root_logger.addHandler(console_handler)
  23. # 2. 创建文件处理器 (FileHandler)
  24. # - 将日志写入文件 app.log
  25. # - mode='w' 表示每次启动都覆盖旧日志
  26. # - encoding='utf-8' 确保正确处理中文字符
  27. file_handler = logging.FileHandler('app.log', mode='w', encoding='utf-8')
  28. file_handler.setFormatter(formatter)
  29. root_logger.addHandler(file_handler)
  30. # 配置完成后,可以记录一条消息来确认
  31. logging.info("日志系统已成功配置,将同时输出到控制台和 app.log 文件。")
  32. def get_logger(name: str) -> logging.Logger:
  33. """
  34. 获取一个指定名称的日志记录器实例。
  35. 假设 setup_logging() 已经在此之前被调用。
  36. """
  37. return logging.getLogger(name)
  38. if __name__ == '__main__':
  39. # setup_logging()
  40. logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
  41. logger = get_logger(__name__)
  42. logger.info("1234")