日志记录#

AutoGen 使用 Python 的内置 logging 模块。

有两种类型的日志记录

  • 跟踪日志记录:这用于调试,是人类可读的消息,指示正在发生的事情。 这旨在让开发人员了解代码中发生的事情。 其他系统不应依赖这些日志的内容和格式。

  • 结构化日志记录:此记录器发出可供其他系统使用的结构化事件。 其他系统可以依赖这些日志的内容和格式。

  • ROOT_LOGGER_NAME 可用于启用或禁用所有日志。

启用日志记录输出#

要启用跟踪日志记录,您可以使用以下代码

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)

要启用结构化日志记录,您可以使用以下代码

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)

结构化日志记录#

结构化日志记录允许您编写处理逻辑来处理实际事件(包括所有字段),而不仅仅是格式化的字符串。

例如,如果您定义了此自定义事件并正在发出它。 然后,您可以编写以下处理程序来接收它。

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:
            # Use the StructuredMessage if the message is an instance of it
            if isinstance(record.msg, MyEvent):
                print(f"Timestamp: {record.msg.timestamp}, Message: {record.msg.message}")
        except Exception:
            self.handleError(record)

这是您可以如何使用它

logger = logging.getLogger(EVENT_LOGGER_NAME)
logger.setLevel(logging.INFO)
my_handler = MyHandler()
logger.handlers = [my_handler]

发出日志#

这两个名称是这些类型的根记录器。 发出日志的代码应使用这些记录器的子记录器。 例如,如果您正在编写一个模块 my_module 并且想要发出跟踪日志,则应使用名为的记录器

import logging

from autogen_core import TRACE_LOGGER_NAME
logger = logging.getLogger(f"{TRACE_LOGGER_NAME}.my_module")

发出结构化日志#

如果您的事件是一个数据类,那么它可以像这样在代码中发出

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"))