# 日志记录 AutoGen 使用 Python 内置的 [`logging`](https://docs.python.org/3/library/logging.html) 模块。 日志分为两种类型: - **跟踪日志**:用于调试,包含人类可读的消息以指示当前运行状态。这类日志旨在帮助开发者理解代码运行情况。其他系统不应依赖这些日志的内容和格式。 - 名称:{py:attr}`~autogen_core.TRACE_LOGGER_NAME`。 - **结构化日志**:该记录器发出结构化事件,可供其他系统消费。其他系统可以依赖这些日志的内容和格式。 - 名称:{py:attr}`~autogen_core.EVENT_LOGGER_NAME`。 - 参见模块 {py:mod}`autogen_core.logging` 了解可用事件。 - {py:attr}`~autogen_core.ROOT_LOGGER_NAME` 可用于启用或禁用所有日志。 ## 启用日志输出 启用跟踪日志的示例代码: ```python import logging from autogen_core import TRACE_LOGGER_NAME logging.basicConfig(level=logging.WARNING) logger = logging.getLogger(TRACE_LOGGER_NAME) logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.DEBUG) ``` 启用结构化日志的示例代码: ```python import logging from autogen_core import EVENT_LOGGER_NAME logging.basicConfig(level=logging.WARNING) logger = logging.getLogger(EVENT_LOGGER_NAME) logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.INFO) ``` ### 结构化日志 结构化日志允许您编写处理逻辑,这些逻辑可以处理包含所有字段的实际事件,而不仅仅是格式化字符串。 例如,如果您定义了这个自定义事件并正在触发它,那么可以编写以下处理程序来接收它: ```python import logging from dataclasses import dataclass @dataclass class MyEvent: timestamp: str message: str class MyHandler(logging.Handler): def __init__(self) -> None: super().__init__() def emit(self, record: logging.LogRecord) -> None: try: # 如果消息是MyEvent实例,则使用结构化消息 if isinstance(record.msg, MyEvent): print(f"Timestamp: {record.msg.timestamp}, Message: {record.msg.message}") except Exception: self.handleError(record) ``` 使用方法如下: ```python logger = logging.getLogger(EVENT_LOGGER_NAME) logger.setLevel(logging.INFO) my_handler = MyHandler() logger.handlers = [my_handler] ``` ## 日志触发 以下两个名称是这些类型的根日志记录器。触发日志的代码应使用这些日志记录器的子记录器。例如,如果您正在编写模块`my_module`并希望触发跟踪日志,应使用以下命名的日志记录器: ```python import logging from autogen_core import TRACE_LOGGER_NAME logger = logging.getLogger(f"{TRACE_LOGGER_NAME}.my_module") ``` ### 触发结构化日志 如果您的event是一个数据类,则可以通过如下代码触发: ```python import logging from dataclasses import dataclass from autogen_core import EVENT_LOGGER_NAME @dataclass class MyEvent: timestamp: str message: str logger = logging.getLogger(EVENT_LOGGER_NAME + ".my_module") logger.info(MyEvent("timestamp", "message")) ```