custom-tracing-logger 0.1.3

A minimal JSON logger for Rust using the tracing ecosystem with one-line initialization
Documentation

Custom Tracing Logger

A minimal Rust crate for structured JSON logging using the tracing ecosystem.

Features

  • JSON Output: All logs formatted as structured JSON
  • Simple API: One-line initialization
  • Selective Monitoring: Control logging per module
  • Environment Variable Support: Respects RUST_LOG
  • Extensible: Built on tracing-subscriber layers

Quick Start

Add to Cargo.toml:

[dependencies]
custom-tracing-logger = "0.1.0"
tracing = "0.1"

Basic usage:

use tracing::info;

fn main() {
    custom_tracing_logger::init();
    info!(user_id = 123, "User logged in");
}

Output:

{"timestamp":"2025-08-17T08:47:20.336668Z","level":"INFO","fields":{"message":"User logged in","user_id":123},"target":"my_app"}

API

Core Functions

init()

One function, behavior controlled by environment variables:

custom_tracing_logger::init();

validate_config() and print_config()

Validate and display current logging configuration:

// Check configuration without initializing
match custom_tracing_logger::validate_config() {
    Ok(config) => println!("Config: {}", config),
    Err(error) => eprintln!("Error: {}", error),
}

// Print configuration to console
custom_tracing_logger::print_config();

Convenience Macros

log_request!

Structured HTTP request logging:

use custom_tracing_logger::log_request;

log_request!("GET", "/api/users", 200, 45);
log_request!("POST", "/api/users", 201, 120, user_id = 123);

log_error!

Structured error logging:

use custom_tracing_logger::log_error;

log_error!("DB_CONNECTION_FAILED", "Database timeout");
log_error!("AUTH_FAILED", "Invalid token", user_id = 123, ip = "192.168.1.1");

Structured Logging Helpers

use custom_tracing_logger::structured;

// HTTP requests
structured::http_request("GET", "/api/users", 200, 45);

// Database operations
structured::database_op("SELECT", "users", 25, Some(10));

// User actions
structured::user_action(123, "login", Some("web"));

Environment Variables:

  • RUST_LOG: Log level filtering (e.g., "info", "debug", "off")
  • LOG_FILE_DIR: Directory for log files (e.g., "./logs")
  • LOG_FILE_PREFIX: Prefix for log files (default: "app")
  • LOG_FILE_ONLY: Set to "true" to disable console output
  • LOG_ENABLE_SPANS: Set to "false" to disable #[instrument] span events (default: "true")

Filtering Examples

Console Only (Default)

RUST_LOG=info cargo run

Console + File Logging

RUST_LOG=info LOG_FILE_DIR=./logs LOG_FILE_PREFIX=myapp cargo run

File Only (Silent Console)

RUST_LOG=info LOG_FILE_DIR=./logs LOG_FILE_ONLY=true cargo run

Disable Span Events

# Minimal logging without #[instrument] enter/exit events
$env:LOG_ENABLE_SPANS='false'; cargo run

Module Filtering

# Specific modules
$env:RUST_LOG='myapp::auth_service=info,myapp::payment_service=warn'; cargo run

# Turn off noisy modules
$env:RUST_LOG='debug,tokio=info,hyper=warn'; cargo run

# Minimal logging (no spans)
$env:RUST_LOG='info'; $env:LOG_ENABLE_SPANS='false'; cargo run

Examples

Run examples:

cargo run --example basic
$env:RUST_LOG='off,selective::auth_service=info,selective::payment_service=warn'; cargo run --example selective
$env:RUST_LOG='debug'; cargo run --example filtering
cargo run --example with_dotenv  # Uses .env file
$env:RUST_LOG='info'; $env:LOG_FILE_DIR='./logs'; $env:LOG_FILE_PREFIX='myapp'; cargo run --example file_logging
$env:RUST_LOG='info'; $env:LOG_FILE_DIR='./logs'; $env:LOG_FILE_ONLY='true'; cargo run --example file_only

Using .env File

Create .env in your project root:

# .env
RUST_LOG=info
LOG_FILE_DIR=./logs
LOG_FILE_PREFIX=myapp
# LOG_FILE_ONLY=true  # Uncomment for file-only logging

Then load it before initializing:

dotenv::dotenv().ok();
custom_tracing_logger::init();

JSON Output Format

{
  "timestamp": "2025-08-17T08:47:20.336668Z",
  "level": "INFO",
  "fields": {
    "message": "HTTP request completed",
    "request_id": "req-abc123",
    "method": "GET",
    "status": 200
  },
  "target": "my_web_server"
}

License

MIT