grlog 0.1.0

A high-performance async logging library based on gorust GMP runtime
Documentation
# grlog

A high-performance async logging library based on gorust GMP runtime.

## Overview

`grlog` is a high-performance asynchronous logging library built on top of the `gorust` GMP runtime. It leverages Go-like concurrency models to provide efficient, non-blocking logging capabilities for Rust applications.

The library is designed to handle high-volume logging scenarios where traditional synchronous loggers might become bottlenecks. By utilizing gorust's lightweight goroutines and channels, `grlog` ensures logging doesn't block your main application threads.

## Features

- **Asynchronous**: Non-blocking logging that won't stall your application
- **High Performance**: Built on gorust GMP runtime for efficient concurrency
- **Flexible Configuration**: Support for multiple log targets and filtering
- **Environment Integration**: Compatible with standard RUST_LOG environment variable
- **Module-level Filtering**: Configure log levels per module
- **Multiple Output Targets**: Console (stdout/stderr), file, and other outputs supported
- **Timestamp Formatting**: Automatic timestamp with millisecond precision
- **Standard Compliant**: Implements the popular `log` crate traits

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
grlog = "0.1.0"
log = "0.4"
```

## Usage

### Basic Usage

```rust
use log::info;
use grlog::init;

fn main() {
    // Initialize with default settings (logs to stderr, level info)
    init();
    
    info!("This is an info message!");
    log::warn!("This is a warning!");
    log::error!("This is an error!");
}
```

### Advanced Configuration

```rust
use log::{info, debug, warn};
use grlog::{builder, Target};

fn main() {
    // Create a custom logger with specific settings
    let mut builder = builder();
    builder
        .filter_level(log::LevelFilter::Debug)
        .filter_module("hyper", log::LevelFilter::Info)
        .filter_module("my_crate::network", log::LevelFilter::Trace)
        .target(Target::Stdout)
        .buffer_size(2048);
    
    builder.init().unwrap();
    
    info!("This is an info message!");
    debug!("This is a debug message");
    warn!("This is a warning");
}
```

### Logging to a File

```rust
use log::info;
use grlog::{builder, Target};
use std::path::PathBuf;

fn main() {
    let mut log_path = PathBuf::from("/tmp");
    log_path.push("app.log");
    
    let mut builder = builder();
    builder
        .target(Target::File(log_path))
        .filter_level(log::LevelFilter::Info);
    
    builder.init().unwrap();
    
    info!("This will be written to the file!");
}
```

### Using Environment Variables

```rust
use grlog::init_from_env;

fn main() {
    // Initialize from RUST_LOG environment variable
    // Example: RUST_LOG=debug,cargo=info,my_module=trace cargo run
    init_from_env();
    
    log::info!("This is an info message!");
}
```

## Configuration Options

- **Targets**: Choose between stdout, stderr, or file output
- **Log Levels**: Trace, Debug, Info, Warn, Error, or Off
- **Module Filters**: Set different log levels for different modules
- **Buffer Size**: Configure the size of the async channel buffer

### Log Format

All log messages follow this format:
```
YYYY-MM-DD HH:MM:SS.mmm LEVEL [target] message
```

Example:
```
2023-05-14 10:30:45.123 INFO [my_app] Application started successfully
```

## Architecture

The core of `grlog` is built around:

1. **Gorust GMP Runtime**: Provides Go-like concurrency with goroutines
2. **Async Backend**: Uses channels for non-blocking message passing
3. **Log Writer Interface**: Pluggable writers for different output targets
4. **Formatter**: Standardized log message formatting with timestamps
5. **Builder Pattern**: Flexible configuration API similar to env_logger

The architecture ensures that even if the logging backend is temporarily slow, your application continues to run without blocking.

## Performance

By leveraging gorust's GMP (Goroutine, Monitor, Processor) model, `grlog` provides:

- Extremely lightweight goroutines for log processing
- Non-blocking message passing through channels
- Minimal overhead during log emission
- Efficient batching and buffering mechanisms
- Thread-safe concurrent logging from multiple application threads

## Comparison with Other Loggers

Unlike traditional Rust loggers that typically write synchronously to output streams, `grlog` uses an asynchronous approach that separates the act of requesting a log from the actual writing. This prevents I/O bottlenecks from affecting your application's performance.

## License

Licensed under MIT license ([LICENSE](LICENSE) or http://opensource.org/licenses/MIT)

## Contributing

We welcome contributions! Please feel free to submit a Pull Request. For bug reports or feature requests, open an issue on GitHub.

## Changelog

### v0.1.0
- Initial release
- Asynchronous logging using gorust GMP runtime
- Support for stdout, stderr and file output
- Module-specific log level filtering
- Environment variable configuration support
- Timestamped log entries with millisecond precision