# Copyright 2026 zhaoxi826 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from loguru import logger from rich.logging import RichHandler from loguru._logger import Logger def setup_logger() -> Logger: logger.remove() def format_record(record): # Format string for rich handler actor = record["extra"].get("actor_name", "System") trace_id = record["extra"].get("trace_id", "") trace_str = f" | trace_id:({trace_id})" if trace_id else "" return f"actor:({actor}){trace_str} : {record['message']}" logger.configure(extra={"actor_name": "System", "trace_id": ""}) logger.add( RichHandler(rich_tracebacks=True, markup=True, show_time=False, show_level=False, show_path=False), format=format_record, level="DEBUG", enqueue=True, # 异步记录 ) return logger global_logger = setup_logger() def get_logger(actor_name: str, trace_id: str = "") -> Logger: return global_logger.bind(actor_name=actor_name, trace_id=trace_id)