Skip to main content

Crate log4you

Crate log4you 

Source
Expand description

§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 using Uuid::now_v7().simple() via log_id! macro
  • 🪄 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 multithreaded apps

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


§⚙️ 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};
 
 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");

§📜 License

Licensed under:

  • Apache License, Version 2.0 LICENSE

§🧑‍💻 Author

Created and maintained by Jerry Maheswara

Feel free to reach out for suggestions, issues, or improvements!


§❤️ Built with Love in Rust

This project is built with ❤️ using Rust — a systems programming language that is safe, fast, and concurrent. Rust is the perfect choice for building reliable and efficient applications.


§👋 Contributing

Pull requests, issues, and feedback are welcome!
If you find this crate useful, give it a ⭐ and share it with others in the Rust community.


Re-exports§

pub use log as __log_crate;
pub use uuid as __uuid_crate;

Modules§

logger
Logger implementation and utilities used internally for structured logging.
macros
Macros wrapped to avoid requiring direct dependencies from the end user.
utils
Utility functions and helpers used internally across the crate.

Macros§

log_debug
Logs a debug-level message with a dynamically generated log_id.
log_debug_with_id
Logs a debug-level message with a custom log_id provided as a parameter.
log_error
Logs an error-level message with a dynamically generated log_id.
log_error_with_id
Logs an error-level message with a custom log_id provided as a parameter.
log_id
A macro to generate a log ID based on the current time using the LogIdFormat trait.
log_info
Logs an info-level message with a dynamically generated log_id.
log_info_with_id
Logs an info-level message with a custom log_id provided as a parameter.
log_warn
Logs a warning-level message with a dynamically generated log_id.
log_warn_with_id
Logs a warning-level message with a custom log_id provided as a parameter.