log4you 0.1.2

Structured logging for Rust with dynamic UUID log IDs, built on log4rs.
Documentation

log4you

Structured logging for Rust with dynamic UUID log IDs, built on log4rs.

log4you is a lightweight logging crate, designed for applications that need consistent, structured logging with unique log identifiers (UUIDs). It allows simple, efficient, and consistent logging with unique log IDs for each request.

โœจ Features

  • ๐Ÿ”ง Powered by log4rs, configure logging dynamically with YAML configuration files, compatible with the standard Rust log facade
  • โœ… Structured logging with automatic UUID log IDs
  • ๐Ÿ†” Generates a unique log_id (UUID v7) per log entry
  • ๐Ÿช„ Easy-to-use macros: log_info!, log_error!, etc.
  • ๐Ÿ› ๏ธ Supports dynamic config paths, log rotation, and file size management
  • ๐Ÿš€ Easy setup and integration โ€” works out of the box
  • ๐Ÿงต Great for async or multi-threaded apps

Perfect for microservices, APIs, and any system where traceability and clean logs matter.

๐Ÿ“ฆ Installation

Add log4you to your Cargo.toml:

[dependencies]
log4you = "0.1.1"

Or, use cargo-edit to add it directly from your terminal:

cargo add log4you

โš™๏ธ Example YAML Configuration

See the log4rs configuration documentation for more details.

appenders:
  stdout:
    kind: console
    encoder:
      pattern: "[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l})} {f}:{L}] - {m}{n}"

  log4you:
    kind: rolling_file
    path: "logs/log4you.log"
    policy:
      kind: compound
      trigger:
        kind: size
        limit: 100MB
      roller:
        kind: fixed_window
        pattern: "logs/log4you-{}.log"
        count: 5
    encoder:
      pattern: "[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l})} {f}:{L}] - {m}{n}"

root:
  level: info
  appenders:
    - stdout

loggers:
  log4you:
    level: debug
    appenders:
      - log4you

๐Ÿ› ๏ธ Usage Example

use log4you::{logger::Logger, log_id, log_info, log_info_with_id};

fn main() {
    let logid = log_id!();
    // Initialize the logger with a log_id, a path to the YAML config, and the service name
    Logger::init(&logid,  Some("config/log4you.yaml"), Some("log4you"));

    // Log an info message, logid will be generated automatically
    log_info!("Service started");

    // Log an info message, logid is defined by yourself
    let custom_log_id = log_id!();
    log_info_with_id!(custom_log_id, "This log uses custom log_id");
}

Author

Jerry Maheswara jerrymaheswara@gmail.com

๐Ÿ“– License

This project is licensed under the Apache-2.0 license.


Built with โค๏ธ in Rust

Changelog

[v0.1.2]

  • Re-export log as __log_crate to support internal macro resolution without requiring users to depend on log explicitly.
  • Re-export uuid as __uuid_crate for similar internal macro usage convenience.