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)