| | import logging |
| | from datetime import datetime |
| | from collections import deque |
| | from threading import Lock |
| |
|
| | DEBUG = False |
| |
|
| | LOG_FORMAT_DEBUG = '%(asctime)s - %(levelname)s - [%(key)s]-%(request_type)s-[%(model)s]-%(status_code)s: %(message)s - %(error_message)s' |
| | LOG_FORMAT_NORMAL = '[%(asctime)s] [%(levelname)s] [%(key)s]-%(request_type)s-[%(model)s]-%(status_code)s: %(message)s' |
| |
|
| | |
| | logger = logging.getLogger("my_logger") |
| | logger.setLevel(logging.DEBUG) |
| |
|
| | |
| | console_handler = logging.StreamHandler() |
| | console_formatter = logging.Formatter('%(message)s') |
| | console_handler.setFormatter(console_formatter) |
| | logger.addHandler(console_handler) |
| |
|
| | |
| | class LogManager: |
| | def __init__(self, max_logs=100): |
| | self.logs = deque(maxlen=max_logs) |
| | self.lock = Lock() |
| | |
| | def add_log(self, log_entry): |
| | with self.lock: |
| | self.logs.append(log_entry) |
| | |
| | def get_recent_logs(self, count=50): |
| | with self.lock: |
| | return list(self.logs)[-count:] |
| |
|
| | |
| | log_manager = LogManager() |
| |
|
| | def format_log_message(level, message, extra=None): |
| | extra = extra or {} |
| | log_values = { |
| | 'asctime': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), |
| | 'levelname': level, |
| | 'key': extra.get('key', 'N/A'), |
| | 'request_type': extra.get('request_type', 'N/A'), |
| | 'model': extra.get('model', 'N/A'), |
| | 'status_code': extra.get('status_code', 'N/A'), |
| | 'error_message': extra.get('error_message', ''), |
| | 'message': message |
| | } |
| | log_format = LOG_FORMAT_DEBUG if DEBUG else LOG_FORMAT_NORMAL |
| | formatted_log = log_format % log_values |
| | |
| | |
| | log_entry = { |
| | 'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), |
| | 'level': level, |
| | 'key': extra.get('key', 'N/A'), |
| | 'request_type': extra.get('request_type', 'N/A'), |
| | 'model': extra.get('model', 'N/A'), |
| | 'status_code': extra.get('status_code', 'N/A'), |
| | 'message': message, |
| | 'error_message': extra.get('error_message', ''), |
| | 'formatted': formatted_log |
| | } |
| | log_manager.add_log(log_entry) |
| | |
| | return formatted_log |
| |
|
| | def log(level: str, message: str, **extra): |
| | """简化日志记录的统一函数""" |
| | msg = format_log_message(level.upper(), message, extra=extra) |
| | getattr(logger, level.lower())(msg) |