platform_common

Crates.ioplatform_common
lib.rsplatform_common
version0.4.8
created_at2025-11-28 11:46:57.546058+00
updated_at2026-01-11 21:48:42.490269+00
descriptionCommon utilities and middleware for microservices: trace-id, structured logging, HTTP propagation, RabbitMQ with auto-reconnect
homepagehttps://gitlab.com/sim2381847/libs/rust/platform_common
repositoryhttps://gitlab.com/sim2381847/libs/rust/platform_common
max_upload_size
id1955191
size231,681
Anna Karenina (Anna-Karenina)

documentation

README

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

Commit count: 0

cargo fmt