#logging-tracing #distributed-tracing #microservices #middleware

platform_common

Common utilities and middleware for microservices: trace-id, structured logging, HTTP propagation, RabbitMQ with auto-reconnect

25 releases

0.4.96 Feb 20, 2026
0.4.95 Feb 19, 2026
0.4.92 Jan 28, 2026
0.4.7 Dec 15, 2025
0.1.4 Nov 29, 2025

#301 in Debugging

MIT license

145KB
2.5K SLoC

Platform Common

Общие утилиты и middleware для микросервисов SIM Platform.

Возможности

  • 📊 Structured Logging - JSON логирование для Loki с trace-id
  • 🔍 Distributed Tracing - Автоматическая propagation trace-id между сервисами
  • 🎯 Axum Middleware - Готовые middleware для trace-id
  • 🚀 Zero Config - Работает из коробки с разумными defaults

Установка

[dependencies]
platform_common = { git = "https://gitlab.com/sim2381847/platform_common.git", features = ["full"] }

Features

  • tracing-setup - Настройка JSON логирования (включено по умолчанию)
  • middleware - Axum middleware для trace-id (включено по умолчанию)
  • trace-propagation - Propagation trace-id в HTTP клиентах
  • full - Все фичи

Использование

1. Настройка логирования

use platform_common::tracing_setup::init_tracing;

fn main() {
    // JSON формат для production (Loki)
    init_tracing("my-service", Some("json"));

    // Pretty формат для локальной разработки
    init_tracing("my-service", Some("pretty

    // Автоопределение из env var LOG_FORMAT
    init_tracing("my-service", None);
}

2. Добавление trace-id middleware

use axum::{Router, routing::get, middleware as axum_middleware};
use platform_common::middleware::trace_id_middleware;

let app = Router::new()
    .route("/", get(handler))
    .layer(axum_middleware::from_fn(trace_id_middleware));

3. Использование trace-id в handlers

use axum::Json;
use platform_common::middleware::TraceId;

async fn my_handler(trace_id: TraceId) -> Json<Response> {
    tracing::info!(trace_id = %trace_id.as_str(), "Processing request");

    // Вызов другого сервиса с propagation trace-id
    call_other_service(&trace_id).await?;

    Json(response)
}

4. Propagation trace-id в HTTP запросах

use platform_common::trace_propagation::TracePropagation;
use platform_common::middleware::TraceId;

async fn call_other_service(trace_id: &TraceId) -> Result<(), Error> {
    let client = reqwest::Client::new();
    let response = client
        .get("http://other-service/api/endpoint")
        .with_trace_id(trace_id)  // ← Добавляет X-Trace-Id header
        .send()
        .await?;

    Ok(())
}

Environment Variables

  • LOG_FORMAT - Формат логирования: json (default) или pretty
  • RUST_LOG - Уровень логирования (default: info)

Примеры

См. examples/ директорию для полных примеров использования.

License

MIT

Dependencies

~0.3–22MB
~245K SLoC