Перейти к основному содержимому

Логирование

Neva интегрируется с экосистемой tracing для Rust, обеспечивая структурированные журнальные сообщения. При правильной настройке эти сообщения автоматически пересылаются подключённым клиентам в виде MCP-уведомлений журнала (notifications/message).

Настройка

Для включения MCP-уведомлений журнала настройте tracing_subscriber с форматтером Neva NotificationFormatter и зарегистрируйте дескриптор с помощью with_logging():

use neva::prelude::*;
use tracing_subscriber::{filter, reload, prelude::*};

#[tokio::main]
async fn main() {
// Создаём перезагружаемый фильтр логов с начальным уровнем
let (filter, handle) = reload::Layer::new(filter::LevelFilter::DEBUG);

tracing_subscriber::registry()
.with(filter)
.with(tracing_subscriber::fmt::layer()
.event_format(notification::NotificationFormatter)) // Направляем логи MCP-клиентам
.init();

App::new()
.with_options(|opt| opt
.with_stdio()
.with_logging(handle)) // Регистрируем дескриптор перезагрузки
.run()
.await;
}

reload::Layer позволяет MCP-серверу динамически изменять уровень логирования во время выполнения — по запросу MCP-клиентов через метод logging/setLevel.

Отправка журнальных сообщений из инструментов

После настройки логирования используйте стандартные макросы tracing внутри обработчиков для отправки журнальных сообщений:

#[tool]
async fn my_tool() {
tracing::info!(logger = "my_tool", "Processing started");
tracing::warn!(logger = "my_tool", "Something looks off");
tracing::debug!(logger = "my_tool", "Debug details here");
}

Необязательное поле logger пересылается клиенту как часть полезной нагрузки уведомления, позволяя клиентам определять источник каждой записи журнала.

Уровни логирования

Neva сопоставляет уровни серьёзности tracing с уровнями журнала MCP следующим образом:

Уровень tracingУровень журнала MCP
ERRORerror
WARNwarning
INFOinfo
DEBUGdebug
TRACEdebug

Уведомления о прогрессе через Tracing

Для долгосрочных инструментов Neva также использует tracing для отправки уведомлений о прогрессе (notifications/progress). Подробнее см. в руководстве Прогресс.

Обучение на примерах

Полный пример доступен здесь.