日志记录#
AutoGen 使用 Python 内置的 logging
模块。
日志分为两种类型:
跟踪日志:用于调试,包含人类可读的消息以指示当前运行状态。这类日志旨在帮助开发者理解代码运行情况。其他系统不应依赖这些日志的内容和格式。
结构化日志:该记录器发出结构化事件,可供其他系统消费。其他系统可以依赖这些日志的内容和格式。
参见模块
autogen_core.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:
# 如果消息是MyEvent实例,则使用结构化消息
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")
触发结构化日志#
如果您的event是一个数据类,则可以通过如下代码触发:
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"))