MCP ロギング使用方法
基本的な使い方
1. DI コンテナへの登録
using Ateliers.Ai.Mcp.DependencyInjection;
using Ateliers.Ai.Mcp.Logging.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
// MCP 実行コンテキストを登録
services.AddMcpExecutionContext();
// MCP ロギングを登録
services.AddMcpLogging(logging =>
{
logging
.SetMinimumLevel(LogLevel.Information) // 最小ログレベル
.AddConsole() // コンソール出力
.AddFile(); // ファイル出力(デフォルト: ./logs/app/mcp-*.log)
});
var serviceProvider = services.BuildServiceProvider();
2. コンストラクタインジェクション
using Ateliers.Ai.Mcp;
using Ateliers.Ai.Mcp.Logging;
public class NotionSyncTool
{
private readonly IMcpExecutionContext _context;
private readonly IMcpLogger _logger;
public NotionSyncTool(IMcpExecutionContext context, IMcpLogger logger)
{
_context = context;
_logger = logger;
}
public async Task ExecuteAsync()
{
// ツールスコープを開始(相関IDとツール名を自動管理)
using var scope = _context.BeginTool("notion.sync");
_logger.Info("MCP.Start");
_logger.Debug($"Tool: {_context.ToolName}, CorrelationId: {_context.CorrelationId}");
try
{
await SyncNotionAsync();
_logger.Info("MCP.Success");
}
catch (Exception ex)
{
_logger.Error("MCP.Failed", ex);
throw;
}
}
private async Task SyncNotionAsync()
{
_logger.Info("Syncing Notion data...");
// 同期処理
await Task.Delay(100);
_logger.Info("Sync completed");
}
}
ログレベル
_logger.Trace("トレース情報"); // LogLevel.Trace
_logger.Debug("デバッグ情報"); // LogLevel.Debug
_logger.Info("情報メッセージ"); // LogLevel.Information
_logger.Warn("警告メッセージ"); // LogLevel.Warning
_logger.Error("エラーメッセージ", ex); // LogLevel.Error
_logger.Critical("重大なエラー", ex); // LogLevel.Critical
ログ出力フォーマット
[2025-01-23T10:00:00.0000000Z] [Information] [MCP] [CID:abc-123] [Tool:notion.sync] MCP.Start
[2025-01-23T10:00:01.0000000Z] [Debug] [MCP] [CID:abc-123] [Tool:notion.sync] Tool: notion.sync, CorrelationId: abc-123
[2025-01-23T10:00:02.0000000Z] [Information] [MCP] [CID:abc-123] [Tool:notion.sync] Syncing Notion data...
[2025-01-23T10:00:03.0000000Z] [Information] [MCP] [CID:abc-123] [Tool:notion.sync] Sync completed
[2025-01-23T10:00:04.0000000Z] [Information] [MCP] [CID:abc-123] [Tool:notion.sync] MCP.Success
フォーマット詳細:
[Timestamp]: ISO 8601 形式のタイムスタンプ(UTC)[LogLevel]: ログレベル[MCP]: カテゴリ(自動設定)[CID:xxx]: 相関ID(自動設定)[Tool:xxx]: ツール名(BeginTool で設定)- メッセージ本文
MCP 実行コンテキストの使い方
ツールスコープの作成
public async Task ExecuteToolAsync(string toolName)
{
// ツールスコープを開始(新しい相関IDとツール名が設定される)
using var scope = _context.BeginTool(toolName);
_logger.Info($"MCP.Start tool={toolName}");
// このスコープ内のすべてのログに同じ相関IDとツール名が付与される
await ProcessToolAsync();
_logger.Info($"MCP.Success tool={toolName}");
}
相関IDとツール名の取得
public void LogContextInfo()
{
var correlationId = _context.CorrelationId;
var toolName = _context.ToolName;
_logger.Info($"CorrelationId: {correlationId}, ToolName: {toolName}");
}
MCP ロギングポリシー
MCP では以下のロギングポリシーに従います:
-
必須ログ:
MCP.Start: ツール実行開始時MCP.Success: ツール実行成功時MCP.Failed: ツール実行失敗時
-
推奨ログ:
- 重要な処理のステップ
- 外部サービスへのリクエスト/レスポンス
- データの変換/変更
-
禁止事項:
- 個人情報(PII)のログ出力
- 認証トークン/パスワードのログ出力
- 大量データの詳細ログ(Debug レベルでも避ける)