Protokollierung#
AutoGen verwendet das integrierte logging Modul von Python.
Es gibt zwei Arten von Logging
Trace Logging: Dies wird zur Fehlersuche verwendet und sind menschenlesbare Meldungen, die anzeigen, was gerade geschieht. Dies ist für einen Entwickler gedacht, um zu verstehen, was im Code vor sich geht. Der Inhalt und das Format dieser Logs sollten nicht von anderen Systemen abhängen.
Name:
TRACE_LOGGER_NAME.
Structured Logging: Dieser Logger gibt strukturierte Ereignisse aus, die von anderen Systemen verarbeitet werden können. Der Inhalt und das Format dieser Logs können von anderen Systemen abhängen.
Name:
EVENT_LOGGER_NAME.Siehe das Modul
autogen_core.logging, um die verfügbaren Ereignisse anzuzeigen.
ROOT_LOGGER_NAMEkann verwendet werden, um alle Logs zu aktivieren oder zu deaktivieren.
Logging-Ausgabe aktivieren#
Um Trace-Logging zu aktivieren, können Sie den folgenden Code verwenden
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)
Um strukturiertes Logging zu aktivieren, können Sie den folgenden Code verwenden
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)
Strukturiertes Logging#
Strukturiertes Logging ermöglicht es Ihnen, Logik zu schreiben, die sich mit den tatsächlichen Ereignissen einschließlich aller Felder befasst, anstatt nur mit einer formatierten Zeichenkette.
Zum Beispiel, wenn Sie dieses benutzerdefinierte Ereignis definiert und ausgegeben hätten. Dann könnten Sie den folgenden Handler schreiben, um es zu empfangen.
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)
Und so könnten Sie es verwenden
logger = logging.getLogger(EVENT_LOGGER_NAME)
logger.setLevel(logging.INFO)
my_handler = MyHandler()
logger.handlers = [my_handler]
Logs ausgeben#
Diese beiden Namen sind die Root-Logger für diese Typen. Code, der Logs ausgibt, sollte einen Kind-Logger dieser Logger verwenden. Zum Beispiel, wenn Sie ein Modul my_module schreiben und Trace-Logs ausgeben möchten, sollten Sie den Logger namens verwenden
import logging
from autogen_core import TRACE_LOGGER_NAME
logger = logging.getLogger(f"{TRACE_LOGGER_NAME}.my_module")
Strukturierte Logs ausgeben#
Wenn Ihr Ereignis eine Dataclass ist, könnte es im Code wie folgt ausgegeben werden
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"))