logging_config.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 公共日志配置文件
  5. 提供统一的日志配置,支持文件和控制台输出
  6. 可以被多个模块共享使用
  7. """
  8. import os
  9. import logging
  10. from datetime import datetime
  11. def setup_logging(log_name, log_dir="logs", level=logging.INFO,
  12. console_output=True, file_output=True):
  13. """
  14. 设置日志配置
  15. Args:
  16. log_name: 日志器名称
  17. log_dir: 日志文件目录
  18. level: 日志级别
  19. console_output: 是否输出到控制台
  20. file_output: 是否输出到文件
  21. """
  22. # 创建logs目录
  23. if file_output and not os.path.exists(log_dir):
  24. os.makedirs(log_dir)
  25. # 创建logger
  26. logger = logging.getLogger(log_name)
  27. logger.setLevel(level)
  28. # 清除已有的handlers,避免重复
  29. logger.handlers.clear()
  30. # 日志格式
  31. formatter = logging.Formatter(
  32. '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  33. datefmt='%Y-%m-%d %H:%M:%S'
  34. )
  35. # 文件输出
  36. if file_output:
  37. # 生成日志文件名(包含日期)
  38. log_filename = f"{log_dir}/{log_name}_{datetime.now().strftime('%Y%m%d')}.log"
  39. file_handler = logging.FileHandler(log_filename, encoding='utf-8')
  40. file_handler.setLevel(level)
  41. file_handler.setFormatter(formatter)
  42. logger.addHandler(file_handler)
  43. # 控制台输出
  44. if console_output:
  45. console_handler = logging.StreamHandler()
  46. console_handler.setLevel(level)
  47. console_handler.setFormatter(formatter)
  48. logger.addHandler(console_handler)
  49. return logger
  50. def get_logger(log_name, log_dir="logs", level=logging.INFO):
  51. """
  52. 获取配置好的logger
  53. Args:
  54. log_name: 日志器名称
  55. log_dir: 日志文件目录
  56. level: 日志级别
  57. Returns:
  58. 配置好的logger实例
  59. """
  60. return setup_logging(log_name, log_dir, level)