123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import logging, os
- from colorama import Fore, Style, init
- from datetime import datetime
- from logging.handlers import TimedRotatingFileHandler
- import time
- image_app_key = '9a30397ae8774eb682b34cd938bf41f9'
- image_app_secret = 'xziff1sdc9w7ycllw97bp0wjdspwqakprge21327v61a905pjk8drfqhh1clqy5g'
- image_url = f'http://api01pim.gloria.com.cn/pimImgApi/product/img/imgByPartNumber'
- info_appkey = "QFYKs3mUVO"
- info_appsecret = "3V9VldtOV7UIVwkUcU4Fg0FcCg"
- info_url = f"http://gbp-api.gloria.com.cn:21015/api/goods/query"
- info_token_url = "http://gbp-api.gloria.com.cn:21015/api/AccessToken"
- def get_cus_logger(log_dir, project_name, if_file=True, when='D', interval=3, file_path_time=10, file_time=7):
- class CustomFilter(logging.Filter):
- def filter(self, record):
- return record.name.startswith(project_name)
-
- class ColorFormatter(logging.Formatter):
- COLORS = {
- 'DEBUG': Fore.CYAN,
- 'INFO': Fore.GREEN,
- 'WARNING': Fore.YELLOW,
- 'ERROR': Fore.RED,
- 'CRITICAL': Fore.RED + Style.BRIGHT
- }
- def format(self, record):
- 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"
- formatter = logging.Formatter(log_fmt, datefmt="%Y-%m-%d %H:%M:%S")
- return formatter.format(record)
- # 自定义过滤器,屏蔽第三方包的日志
- os.makedirs(log_dir, exist_ok=True)
- # 自定义格式化器
- log_format = ("%(asctime)s %(filename)s [%(funcName)s:%(lineno)d] "
- "%(levelname)s:\n%(message)s\n")
- date_format = "%Y-%m-%d %H:%M:%S" # 自定义时间格式,不包含毫秒
- formatter = logging.Formatter(log_format, datefmt=date_format)
- # 创建日志器
- logger = logging.getLogger(f"{project_name}_logger")
- logger.setLevel(logging.INFO) # 设置最低日志级别为INFO
- console_handler = logging.StreamHandler()
- console_handler.setFormatter(ColorFormatter())
- logger.addHandler(console_handler)
- logger.addFilter(CustomFilter()) # 添加自定义过滤器
- def custom_namer(default_name):
- current_time = time.time()
- TIME_THRESHOLD_FILEPATH = file_path_time * 24 * 60 * 60
- TIME_THRESHOLD_FILE = file_time * 24 * 60 * 60
- for root, dirs, files in os.walk(log_dir, topdown=False):
- try:
- for file in files:
- file_path = os.path.join(root, file)
- if current_time - os.path.getmtime(file_path) > TIME_THRESHOLD_FILE:
- # print(f"删除文件: {file_path}")
- # os.remove(file_path)
- pass
- # 删除文件夹
- for dir in dirs:
- dir_path = os.path.join(root, dir)
- if current_time - os.path.getmtime(dir_path) > TIME_THRESHOLD_FILEPATH:
- # print(f"删除文件夹: {dir_path}")
- # shutil.rmtree(dir_path)
- pass
- except Exception as e:
- print(f'删除文件出错:{e}')
- current_time = datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
- return os.path.join(log_dir, f"{project_name}-{current_time}.log")
- if if_file:
- file_handler = TimedRotatingFileHandler(
- filename=os.path.join(log_dir, f"{project_name}-new"),
- when=when,
- interval=interval,
- backupCount=10, # 保留最近7天的日志
- encoding="utf-8",
- )
-
-
- file_handler.setFormatter(formatter)
- file_handler.suffix = "%Y-%m-%d-%H:%M:%S.log"
- file_handler.namer = custom_namer
- logger.addHandler(file_handler)
- # 控制台处理器,用于在终端输出
-
- return logger
- logger = get_cus_logger(log_dir='/dalin/logs', project_name='rfid',if_file=True, when='d',interval=1,file_time=7)
|