日志记录#
AutoGen 使用 Python 的内置 logging
模块。
有两种日志记录方式:
跟踪日志记录:用于调试,并且是人类可读的消息,用于指示正在发生的事情。这些日志的内容和格式不应被其他系统依赖,旨在帮助开发人员理解代码中正在发生的情况。
名称:
TRACE_LOGGER_NAME
.
结构化日志记录:该记录器发出结构化事件,这些事件可以被其他系统所使用。这些日志的内容和格式可以被其他系统所依赖。
名称:
EVENT_LOGGER_NAME
.请参阅模块
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:
# 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")
生成结构化日志#
如果你的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"))