AutoGen Core : フレームワークガイド : ロギング

AutoGen は Python の組み込み logging モジュールを使用し、2 つの種類のロギングがあります。

AutoGen Core : フレームワークガイド : ロギング

作成 : クラスキャット・セールスインフォメーション
作成日時 : 04/14/2025

* 本記事は github microsoft/autogen の以下のページを独自に翻訳した上でまとめ直し、補足説明を加えています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ リニューアルしました 😉

クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • sales-info@classcat.com
  • ClassCatJP

 

 

AutoGen Core : フレームワークガイド : ロギング

AutoGen は Python の組み込み logging モジュールを使用します。

2 つの種類のロギングがあります :

  • Trace logging (トレース・ログ) : これはデバッグに使用され、何が起きているかを示す可読なメッセージです。これは開発者がコードで何が起きているかを理解することを意図しています。これらのログの内容と形式は他のシステムに依存するべきではありません。

  • Structured logging (構造化ログ) : この logger は他のシステムにより処理できる構造化イベントを出力します。これらのログの内容と形式は他のシステムにより依存可能です。

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

And this is how you could use it:

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

 

ログの出力

これら 2 つの名前はこれらのタイプの root ロガーです。ログを出力するコードはこれらのロガーの子 (child) ロガーを使用する必要があります。例えば、モジュール my_module を作成してトレースログを出力したい場合、次の名前のロガーを使用する必要があります :

import logging

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

 

構造化ログの出力

If your event is a dataclass, then it could be emitted in code like this:

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

 

以上