| Crates.io | custom-tracing-logger |
| lib.rs | custom-tracing-logger |
| version | 0.1.3 |
| created_at | 2025-08-17 10:39:12.082274+00 |
| updated_at | 2025-08-24 10:34:12.782458+00 |
| description | A minimal JSON logger for Rust using the tracing ecosystem with one-line initialization |
| homepage | https://github.com/huyhoang1001/custom-tracing-logger/blob/main/DEEP_DIVE.md |
| repository | https://github.com/huyhoang1001/custom-tracing-logger |
| max_upload_size | |
| id | 1799305 |
| size | 72,782 |
A minimal Rust crate for structured JSON logging using the tracing ecosystem.
RUST_LOGtracing-subscriber layersAdd 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"}
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();
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");
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 outputLOG_ENABLE_SPANS: Set to "false" to disable #[instrument] span events (default: "true")RUST_LOG=info cargo run
RUST_LOG=info LOG_FILE_DIR=./logs LOG_FILE_PREFIX=myapp cargo run
RUST_LOG=info LOG_FILE_DIR=./logs LOG_FILE_ONLY=true cargo run
# Minimal logging without #[instrument] enter/exit events
$env:LOG_ENABLE_SPANS='false'; cargo run
# 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
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
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();
{
"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"
}
MIT