config.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import logging, os
  2. from colorama import Fore, Style, init
  3. from datetime import datetime
  4. from logging.handlers import TimedRotatingFileHandler
  5. import time
  6. image_app_key = '9a30397ae8774eb682b34cd938bf41f9'
  7. image_app_secret = 'xziff1sdc9w7ycllw97bp0wjdspwqakprge21327v61a905pjk8drfqhh1clqy5g'
  8. image_url = f'http://api01pim.gloria.com.cn/pimImgApi/product/img/imgByPartNumber'
  9. info_appkey = "QFYKs3mUVO"
  10. info_appsecret = "3V9VldtOV7UIVwkUcU4Fg0FcCg"
  11. info_url = f"http://gbp-api.gloria.com.cn:21015/api/goods/query"
  12. info_token_url = "http://gbp-api.gloria.com.cn:21015/api/AccessToken"
  13. def get_cus_logger(log_dir, project_name, if_file=True, when='D', interval=3, file_path_time=10, file_time=7):
  14. class CustomFilter(logging.Filter):
  15. def filter(self, record):
  16. return record.name.startswith(project_name)
  17. class ColorFormatter(logging.Formatter):
  18. COLORS = {
  19. 'DEBUG': Fore.CYAN,
  20. 'INFO': Fore.GREEN,
  21. 'WARNING': Fore.YELLOW,
  22. 'ERROR': Fore.RED,
  23. 'CRITICAL': Fore.RED + Style.BRIGHT
  24. }
  25. def format(self, record):
  26. log_fmt = f"{self.COLORS.get(record.levelname, '')}%(asctime)s %(filename)s [%(funcName)s:%(lineno)d] %(levelname)s:{Style.RESET_ALL}\n%(message)s\n"
  27. formatter = logging.Formatter(log_fmt, datefmt="%Y-%m-%d %H:%M:%S")
  28. return formatter.format(record)
  29. # 自定义过滤器,屏蔽第三方包的日志
  30. os.makedirs(log_dir, exist_ok=True)
  31. # 自定义格式化器
  32. log_format = ("%(asctime)s %(filename)s [%(funcName)s:%(lineno)d] "
  33. "%(levelname)s:\n%(message)s\n")
  34. date_format = "%Y-%m-%d %H:%M:%S" # 自定义时间格式,不包含毫秒
  35. formatter = logging.Formatter(log_format, datefmt=date_format)
  36. # 创建日志器
  37. logger = logging.getLogger(f"{project_name}_logger")
  38. logger.setLevel(logging.INFO) # 设置最低日志级别为INFO
  39. console_handler = logging.StreamHandler()
  40. console_handler.setFormatter(ColorFormatter())
  41. logger.addHandler(console_handler)
  42. logger.addFilter(CustomFilter()) # 添加自定义过滤器
  43. def custom_namer(default_name):
  44. current_time = time.time()
  45. TIME_THRESHOLD_FILEPATH = file_path_time * 24 * 60 * 60
  46. TIME_THRESHOLD_FILE = file_time * 24 * 60 * 60
  47. for root, dirs, files in os.walk(log_dir, topdown=False):
  48. try:
  49. for file in files:
  50. file_path = os.path.join(root, file)
  51. if current_time - os.path.getmtime(file_path) > TIME_THRESHOLD_FILE:
  52. # print(f"删除文件: {file_path}")
  53. # os.remove(file_path)
  54. pass
  55. # 删除文件夹
  56. for dir in dirs:
  57. dir_path = os.path.join(root, dir)
  58. if current_time - os.path.getmtime(dir_path) > TIME_THRESHOLD_FILEPATH:
  59. # print(f"删除文件夹: {dir_path}")
  60. # shutil.rmtree(dir_path)
  61. pass
  62. except Exception as e:
  63. print(f'删除文件出错:{e}')
  64. current_time = datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
  65. return os.path.join(log_dir, f"{project_name}-{current_time}.log")
  66. if if_file:
  67. file_handler = TimedRotatingFileHandler(
  68. filename=os.path.join(log_dir, f"{project_name}-new"),
  69. when=when,
  70. interval=interval,
  71. backupCount=10, # 保留最近7天的日志
  72. encoding="utf-8",
  73. )
  74. file_handler.setFormatter(formatter)
  75. file_handler.suffix = "%Y-%m-%d-%H:%M:%S.log"
  76. file_handler.namer = custom_namer
  77. logger.addHandler(file_handler)
  78. # 控制台处理器,用于在终端输出
  79. return logger
  80. logger = get_cus_logger(log_dir='/dalin/logs', project_name='rfid',if_file=True, when='d',interval=1,file_time=7)