from loguru import logger import logging import sys import os def chat_log_filter(record): return "chat_msg" in record["extra"] def not_chat_log_filter(record): return "chat_msg" not in record["extra"] def formatter_with_clip(record): # Note this function returns the string to be formatted, not the actual message to be logged # record["extra"]["serialized"] = "555555" max_len = 12 record['function_x'] = record['function'].center(max_len) if len(record['function_x']) > max_len: record['function_x'] = ".." + record['function_x'][-(max_len-2):] record['line_x'] = str(record['line']).ljust(3) return '{time:HH:mm} | {function_x}:{line_x} | {message}\n' def setup_logging(PATH_LOGGING): admin_log_path = os.path.join(PATH_LOGGING, "admin") os.makedirs(admin_log_path, exist_ok=True) sensitive_log_path = os.path.join(admin_log_path, "chat_secrets.log") regular_log_path = os.path.join(admin_log_path, "console_log.log") logger.remove() logger.configure( levels=[dict(name="WARNING", color="")], ) logger.add( sys.stderr, format=formatter_with_clip, # format='{time:HH:mm} | {function}:{line} - {message}', filter=(lambda record: not chat_log_filter(record)), colorize=True, enqueue=True ) logger.add( sensitive_log_path, format='{time:MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}', rotation="10 MB", filter=chat_log_filter, enqueue=True, ) logger.add( regular_log_path, format='{time:MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}', rotation="10 MB", filter=not_chat_log_filter, enqueue=True, ) logging.getLogger("httpx").setLevel(logging.WARNING) logger.warning(f"所有对话记录将自动保存在本地目录{sensitive_log_path}, 请注意自我隐私保护哦!") # logger.bind(chat_msg=True).info("This message is logged to the file!") # logger.debug(f"debug message") # logger.info(f"info message") # logger.success(f"success message") # logger.error(f"error message") # logger.add("special.log", filter=lambda record: "special" in record["extra"]) # logger.debug("This message is not logged to the file")