# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project import logging from pathlib import Path from vllm import envs class NewLineFormatter(logging.Formatter): """Adds logging prefix to newlines to align multi-line messages.""" def __init__(self, fmt, datefmt=None, style="%"): super().__init__(fmt, datefmt, style) self.use_relpath = envs.VLLM_LOGGING_LEVEL == "DEBUG" if self.use_relpath: self.root_dir = Path(__file__).resolve().parent.parent.parent def format(self, record): def shrink_path(relpath: Path) -> str: """ Shortens a file path for logging display: - Removes leading 'vllm' folder if present. - If path starts with 'v1', keeps the first two and last two levels, collapsing the middle as '...'. - Otherwise, keeps the first and last two levels, collapsing the middle as '...'. - If the path is short, returns it as-is. - Examples: vllm/model_executor/layers/quantization/utils/fp8_utils.py -> model_executor/.../quantization/utils/fp8_utils.py vllm/model_executor/layers/quantization/awq.py -> model_executor/layers/quantization/awq.py vllm/v1/attention/backends/mla/common.py -> v1/attention/backends/mla/common.py Args: relpath (Path): The relative path to be shortened. Returns: str: The shortened path string for display. """ parts = list(relpath.parts) new_parts = [] if parts and parts[0] == "vllm": parts = parts[1:] if parts and parts[0] == "v1": new_parts += parts[:2] parts = parts[2:] elif parts: new_parts += parts[:1] parts = parts[1:] if len(parts) > 2: new_parts += ["..."] + parts[-2:] else: new_parts += parts return "/".join(new_parts) if self.use_relpath: abs_path = getattr(record, "pathname", None) if abs_path: try: relpath = Path(abs_path).resolve().relative_to(self.root_dir) except Exception: relpath = Path(record.filename) else: relpath = Path(record.filename) record.fileinfo = shrink_path(relpath) else: record.fileinfo = record.filename msg = super().format(record) if record.message != "": parts = msg.split(record.message) msg = msg.replace("\n", "\r\n" + parts[0]) return msg