Setup server logging system Args: logger_instance: Main logger instance log_ws_manager: WebSocket connection manager log_level_name: Log level name redirect_print_str: Whether to redirect print output Returns: Tuple[object, object]: Original std
(
logger_instance: logging.Logger,
log_ws_manager: Optional[WebSocketConnectionManager],
log_level_name: str = "INFO",
redirect_print_str: str = "false",
)
| 74 | |
| 75 | |
| 76 | def setup_server_logging( |
| 77 | logger_instance: logging.Logger, |
| 78 | log_ws_manager: Optional[WebSocketConnectionManager], |
| 79 | log_level_name: str = "INFO", |
| 80 | redirect_print_str: str = "false", |
| 81 | ) -> Tuple[object, object]: |
| 82 | """ |
| 83 | Setup server logging system |
| 84 | |
| 85 | Args: |
| 86 | logger_instance: Main logger instance |
| 87 | log_ws_manager: WebSocket connection manager |
| 88 | log_level_name: Log level name |
| 89 | redirect_print_str: Whether to redirect print output |
| 90 | |
| 91 | Returns: |
| 92 | Tuple[object, object]: Original stdout and stderr streams |
| 93 | """ |
| 94 | log_level = getattr(logging, log_level_name.upper(), logging.INFO) |
| 95 | redirect_print = redirect_print_str.lower() in ("true", "1", "yes") |
| 96 | |
| 97 | # Create necessary directories |
| 98 | os.makedirs(LOG_DIR, exist_ok=True) |
| 99 | os.makedirs(ACTIVE_AUTH_DIR, exist_ok=True) |
| 100 | os.makedirs(SAVED_AUTH_DIR, exist_ok=True) |
| 101 | |
| 102 | # Clear existing handlers |
| 103 | if logger_instance.hasHandlers(): |
| 104 | logger_instance.handlers.clear() |
| 105 | logger_instance.setLevel(log_level) |
| 106 | logger_instance.propagate = False |
| 107 | |
| 108 | # Remove old log file |
| 109 | if os.path.exists(APP_LOG_FILE_PATH): |
| 110 | try: |
| 111 | os.remove(APP_LOG_FILE_PATH) |
| 112 | except OSError as e: |
| 113 | print( |
| 114 | f"Warning (setup_server_logging): Failed to remove old app.log file '{APP_LOG_FILE_PATH}': {e}. Will rely on mode='w' for truncation.", |
| 115 | file=sys.__stderr__, |
| 116 | ) |
| 117 | |
| 118 | # Use JSONFormatter for file logging if JSON_LOGS_ENABLED, otherwise PlainGridFormatter |
| 119 | if JSON_LOGS_ENABLED: |
| 120 | file_log_formatter = JSONFormatter() |
| 121 | else: |
| 122 | file_log_formatter = PlainGridFormatter() |
| 123 | |
| 124 | file_handler = logging.handlers.RotatingFileHandler( |
| 125 | APP_LOG_FILE_PATH, |
| 126 | maxBytes=LOG_FILE_MAX_BYTES, |
| 127 | backupCount=LOG_FILE_BACKUP_COUNT, |
| 128 | encoding="utf-8", |
| 129 | mode="w", |
| 130 | ) |
| 131 | file_handler.setFormatter(file_log_formatter) |
| 132 | file_handler.setLevel(log_level) |
| 133 | logger_instance.addHandler(file_handler) |