π A beautiful, terminal-focused structured logger for Rust
CCB brings elegance and visual appeal to the Rust ecosystem. It is designed for command-line interface (CLI) applications that want to achieve beautiful, readable, and structured log output.
- π― Semantic Log Levels: Trace, Debug, Info, Warn, Error with four-character alignment
- π Automatic Colors: Beautiful colored output with smart terminal detection
- β° Precise Timestamps: High-precision timestamps in
2006-01-02 03:04:05.789
format - π Chainable Context: Add structured key-value pairs with
with(key, value)
- π οΈ Simple Macros: Easy-to-use macros with variadic arguments support
- ποΈ Global Logger: Set and use a global logger instance across your application
- π± Terminal Friendly: No icons, maximum compatibility across terminals
- β‘ Zero Config: Works beautifully out of the box with sensible defaults
Add CCB Logger to your Cargo.toml
:
[dependencies]
ccb = "0.1.0"
use ccb::{info, warn, error, debug, trace};
fn main() {
// Simple logging
info!("Application started");
warn!("This is a warning");
error!("Something went wrong");
// With structured fields
info!("User login", "user_id", "12345", "ip", "192.168.1.100");
error!("Database error", "table", "users", "error", "connection timeout");
}
use ccb::{Logger, Level, set_global_logger};
fn main() {
// Create a custom logger
let logger = Logger::new()
.with_level(Level::Debug)
.with_colors(true)
.with_timestamp(true)
.with("service", "my-app")
.with("version", "1.0.0");
// Set as global logger
set_global_logger(logger);
// Now all macro calls will use the configured logger
debug!("Debug message with context");
info!("Request processed", "method", "GET", "path", "/api/users");
}
use ccb::{Logger, Level, Config};
fn main() {
// Custom configuration
let config = Config {
level: Level::Trace,
use_colors: false, // Disable colors for CI/CD
show_timestamp: true,
};
let logger = Logger::with_config(config)
.with("component", "auth")
.with("environment", "production");
// Direct logger usage
logger.trace("Entering function", &[("fn", "authenticate")]);
logger.info("Authentication successful", &[("user", "alice")]);
logger.error("Rate limit exceeded", &[("ip", "192.168.1.1"), ("attempts", "10")]);
}
2024-01-15 14:30:25.1234 INFO Application started
2024-01-15 14:30:25.1235 WARN Configuration file not found path=config.toml
2024-01-15 14:30:25.1236 INFO User login user_id=12345 ip=192.168.1.100
2024-01-15 14:30:25.1237 ERRO Database connection failed error=timeout retry_count=3
2024-01-15 14:30:25.1238 DEBG Cache hit key=user:12345 ttl=300
CCB supports five log levels with four-character alignment:
Level | Code | Color | Description |
---|---|---|---|
Trace | TRCE |
Cyan | π Detailed tracing information |
Debug | DEBG |
Blue | π Debug information for developers |
Info | INFO |
Green | βΉοΈ General information messages |
Warn | WARN |
Yellow | |
Error | ERRO | Red | β Error conditions |
with_level(level)
- Set minimum log levelwith_colors(bool)
- Enable/disable colored outputwith_timestamp(bool)
- Show/hide timestampswith(key, value)
- Add context key-value pair
CCB automatically detects if output is going to a terminal and enables colors accordingly. You can override this behavior:
let logger = Logger::new().with_colors(false); // Force disable colors
Run the test suite:
cargo test
Run tests with output:
cargo test -- --nocapture
Check out the examples/
directory for more usage patterns:
cargo run --example basic_usage
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- π΄ Fork the repository
- π Create your feature branch (
git checkout -b feature/amazing-feature
) - β
Commit your changes (
git commit -m 'Add some amazing feature'
) - π€ Push to the branch (
git push origin feature/amazing-feature
) - π Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by charmbracelet/log β€οΈ
- CCB has no real meaning, the name was given by a friend
- Built with β€οΈ for the Rust community
- Thanks to all contributors! π
- charmbracelet/log - The original Go implementation
- env_logger - Simple logger controlled via environment
- tracing - Application-level tracing framework