rat_logger 0.3.0

具有生产者消费者架构、异步文件操作和分层配置系统的高性能日志库
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
# rat_logger

[![Crates.io](https://img.shields.io/crates/v/rat_logger.svg)](https://crates.io/crates/rat_logger)
[![Crates.io](https://img.shields.io/crates/d/rat_logger.svg)](https://crates.io/crates/rat_logger)
[![GitHub stars](https://img.shields.io/github/stars/0ldm0s/rat_logger.svg)](https://github.com/0ldm0s/rat_logger)
[![GitHub forks](https://img.shields.io/github/forks/0ldm0s/rat_logger.svg)](https://github.com/0ldm0s/rat_logger)
[![GitHub issues](https://img.shields.io/github/issues/0ldm0s/rat_logger.svg)](https://github.com/0ldm0s/rat_logger/issues)
[![License](https://img.shields.io/crates/l/rat_logger.svg)](https://crates.io/crates/rat_logger)
[![Rust](https://img.shields.io/badge/rust-1.70%2B-orange.svg)](https://rust-lang.org)

[🇨🇳 中文]README.md | [🇺🇸 English]README_en.md | [🇯🇵 日本語]README_ja.md

rat_logger 是一个用 Rust 编写的高性能、线程安全的日志库,采用异步广播架构和批量处理机制,提供卓越的性能表现和灵活的配置选项。

## 特性

- **极致性能**: 采用异步广播架构,在 MacBook Air M1 环境下实测终端输出性能可达 40万+ msg/sec(仅供参考)
- **线程安全**: 完全线程安全,支持多线程并发写入,采用原子操作避免锁竞争
- **多种输出方式**: 支持终端、文件、UDP 网络等多种输出方式
- **分层配置**: 格式配置与颜色配置分离,默认无颜色主题
- **日志宏**: 兼容标准 log 库的宏接口,提供便捷的日志记录方式
- **开发模式**: 可选的开发模式确保日志立即输出,便于调试和学习
- **灵活配置**: 统一的 LoggerBuilder 接口,支持链式配置
- **结构化日志**: 支持结构化的日志记录和元数据
- **压缩支持**: 内置 LZ4 压缩功能,自动压缩旧日志文件
- **UDP 网络传输**: 支持通过 UDP 协议将日志发送到远程服务器
- **认证机制**: 支持基于令牌的认证机制

## 快速开始

### 环境变量配置(最简单)

支持通过 `RUST_LOG` 环境变量自动配置日志级别,无需任何代码初始化:

```bash
# 设置日志级别
export RUST_LOG=info  # 可选值: error, warn, info, debug, trace

# 然后直接使用日志宏
cargo run your_app.rs
```

详细使用方法请参考 `examples/env_log_example.rs` 示例。

### 使用日志宏(推荐)

```rust
use rat_logger::{LoggerBuilder, LevelFilter, error, warn, info, debug, trace};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化全局日志器
    LoggerBuilder::new()
        .with_level(LevelFilter::Debug)
        .add_terminal_with_config(rat_logger::handler::term::TermConfig::default())
        .init_global_logger()?;

    // 使用日志宏记录日志
    error!("这是一个错误日志");
    warn!("这是一个警告日志");
    info!("这是一个信息日志");
    debug!("这是一个调试日志");
    trace!("这是一个跟踪日志");

    Ok(())
}
```

### 生产环境与开发环境配置

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FileConfig};
use std::path::PathBuf;

fn main() {
    // 生产环境配置(推荐)
    let prod_logger = LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .add_terminal_with_config(rat_logger::handler::term::TermConfig::default())
        .build();

    // 开发环境配置(立即输出)
    let dev_logger = LoggerBuilder::new()
        .with_level(LevelFilter::Debug)
        .with_dev_mode(true)  // 启用开发模式,确保日志立即输出
        .add_terminal_with_config(rat_logger::handler::term::TermConfig::default())
        .build();

    // 生产环境文件日志器
    let file_config = FileConfig {
        log_dir: PathBuf::from("./app_logs"),
        max_file_size: 10 * 1024 * 1024,  // 10MB
        max_compressed_files: 5,
        compression_level: 4,
        min_compress_threads: 2,
        skip_server_logs: false,
        is_raw: false,
        compress_on_drop: false,
        force_sync: false,      // 异步写入,性能更好
        format: None,
    };

    let prod_file_logger = LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .add_file(file_config)
        .build();
}
```

**⚠️ 重要提醒:**
- 在生产环境中,请不要启用开发模式以获得最佳性能
- 开发模式会强制等待异步操作完成,虽然便于调试但会降低性能
- 开发模式主要用于测试、示例和学习场景

### 批量处理配置建议

rat_logger使用批量处理机制来提高性能,通过BatchConfig来控制批量处理的行为:

#### 同步模式(推荐用于大多数应用)

对于日志量不大且要求可靠输出的应用(如CLI工具、命令行应用):

*⚠️ 性能数据仅供参考,实际性能因硬件和环境而异*

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FormatConfig};

fn main() {
    let format_config = FormatConfig {
        timestamp_format: "%Y-%m-%d %H:%M:%S%.3f".to_string(),
        level_style: rat_logger::LevelStyle::default(),
        format_template: "{timestamp} [{level}] {message}".to_string(),
    };

    // 同步模式:自动使用同步配置,确保日志立即输出
    LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .add_terminal_with_config(rat_logger::handler::term::TermConfig {
            enable_color: true,
            format: Some(format_config),
            color: None,
        })
        .init_global_logger()
        .unwrap();
}
```

**注意**:同步模式下,LoggerBuilder会自动使用同步的BatchConfig(batch_size=1, batch_interval_ms=1, buffer_size=1024),无需手动配置。

#### 异步模式(高吞吐量应用)

对于高并发、大日志量的生产环境应用:

*⚠️ 性能数据仅供参考,实际性能因硬件和环境而异*

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FormatConfig, BatchConfig};

fn main() {
    let format_config = FormatConfig {
        timestamp_format: "%Y-%m-%d %H:%M:%S%.3f".to_string(),
        level_style: rat_logger::LevelStyle::default(),
        format_template: "{timestamp} [{level}] {message}".to_string(),
    };

    // 异步模式:高性能批量处理
    LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .with_async_mode(true)  // 启用异步模式
        .with_batch_config(BatchConfig {
            batch_size: 2048,         // 2KB批量大小
            batch_interval_ms: 25,    // 25ms刷新间隔
            buffer_size: 16384,      // 16KB缓冲区
        })
        .add_terminal_with_config(rat_logger::handler::term::TermConfig {
            enable_color: true,
            format: Some(format_config),
            color: None,
        })
        .init_global_logger()
        .unwrap();
}
```

#### 极端性能配置

对于极端高吞吐量的场景(如日志聚合服务):

*⚠️ 性能数据仅供参考,实际性能因硬件和环境而异*

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FormatConfig, BatchConfig};

fn main() {
    let format_config = FormatConfig {
        timestamp_format: "%Y-%m-%d %H:%M:%S%.3f".to_string(),
        level_style: rat_logger::LevelStyle::default(),
        format_template: "{timestamp} [{level}] {message}".to_string(),
    };

    // 极端性能配置
    LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .with_async_mode(true)  // 启用异步模式
        .with_batch_config(BatchConfig {
            batch_size: 4096,          // 4KB批量大小
            batch_interval_ms: 50,    // 50ms刷新间隔
            buffer_size: 32768,      // 32KB缓冲区
        })
        .add_terminal_with_config(rat_logger::handler::term::TermConfig {
            enable_color: true,
            format: Some(format_config),
            color: None,
        })
        .init_global_logger()
        .unwrap();
}
```

**配置建议总结:**
- **CLI工具/命令行应用**: 使用默认配置(同步模式)
- **Web服务/后台应用**: 使用异步批量配置 (2KB批量,25ms间隔)
- **高吞吐量服务**: 使用较大批量配置 (4KB批量,50ms间隔)
- **测试/开发环境**: 启用开发模式 (`with_dev_mode(true)`)

### 文件日志批量配置指导

rat_logger的文件处理器具有独立的批量配置机制,为了确保文件日志的可靠写入,需要根据应用场景选择合适的配置。

#### 可靠写入配置

对于要求日志立即持久化的应用(如CLI工具、关键业务系统):

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FileConfig, BatchConfig};
use std::path::PathBuf;

fn main() {
    let file_config = FileConfig {
        log_dir: PathBuf::from("./logs"),
        max_file_size: 10 * 1024 * 1024, // 10MB
        max_compressed_files: 5,
        compression_level: 4,
        min_compress_threads: 2,
        skip_server_logs: false,
        is_raw: false,
        compress_on_drop: false,
        force_sync: false,     // 异步写入,性能更好
        format: None,
    };

    // 可靠写入配置
    LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .add_file(file_config)
        .with_batch_config(BatchConfig {
            batch_size: 1,          // 1字节就触发写入
            batch_interval_ms: 1,  // 1ms就触发写入
            buffer_size: 1,        // 1字节缓冲区
        })
        .init_global_logger()
        .unwrap();
}
```

#### 平衡配置

对于一般Web应用,平衡性能和可靠性:

```rust
.with_batch_config(BatchConfig {
    batch_size: 512,        // 512字节批量大小
    batch_interval_ms: 10,  // 10ms刷新间隔
    buffer_size: 1024,      // 1KB缓冲区
})
```

#### 高性能配置

对于高吞吐量服务,优先性能:

```rust
.with_batch_config(BatchConfig {
    batch_size: 2048,       // 2KB批量大小
    batch_interval_ms: 25,   // 25ms刷新间隔
    buffer_size: 4096,      // 4KB缓冲区
})
```

#### 配置选择建议

- **关键业务应用**: 使用可靠写入配置,确保日志不丢失
- **一般Web应用**: 使用平衡配置,在性能和可靠性间取得平衡
- **高并发日志**: 使用高性能配置,但确保应用运行时间>2秒
- **快速启动应用**: 使用可靠写入配置,避免日志丢失

### 文件处理器配置

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FileConfig};
use std::path::PathBuf;

fn main() {
    let file_config = FileConfig {
        log_dir: PathBuf::from("./app_logs"),
        max_file_size: 10 * 1024 * 1024, // 10MB
        max_compressed_files: 5,
        compression_level: 4,
        min_compress_threads: 2,
        skip_server_logs: false,
        is_raw: false,
        compress_on_drop: false,
        force_sync: false,      // 异步写入,性能更好
        format: None,
    };

    let logger = LoggerBuilder::new()
        .with_level(LevelFilter::Debug)
        .add_file(file_config)
        .build();
}
```

### UDP 网络输出

```rust
use rat_logger::{LoggerBuilder, LevelFilter, NetworkConfig};

fn main() {
    let network_config = NetworkConfig {
        server_addr: "127.0.0.1".to_string(),
        server_port: 54321,
        auth_token: "your_token".to_string(),
        app_id: "my_app".to_string(),
    };

    let logger = LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .with_dev_mode(true)  // 开发模式下启用,确保日志立即发送
        .add_udp(network_config)
        .build();
}
```

### 多输出处理器

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FileConfig};
use std::path::PathBuf;

fn main() {
    let file_config = FileConfig {
        log_dir: PathBuf::from("./app_logs"),
        max_file_size: 10 * 1024 * 1024, // 10MB
        max_compressed_files: 5,
        compression_level: 4,
        min_compress_threads: 2,
        skip_server_logs: false,
        is_raw: false,
        compress_on_drop: false,
        force_sync: false,      // 异步写入,性能更好
        format: None,
    };

    // 创建多输出日志器(终端 + 文件)
    // LoggerBuilder内部使用ProcessorManager协调多个处理器
    let logger = LoggerBuilder::new()
        .with_level(LevelFilter::Debug)
        .add_terminal_with_config(rat_logger::handler::term::TermConfig::default())  // 添加终端输出
        .add_file(file_config)  // 添加文件输出
        .build();
}
```

## 架构设计

rat_logger 采用了先进的异步广播架构:

### 核心架构组件

- **生产者-消费者广播模式**: 主线程序列化日志记录并广播到所有处理器工作线程
- **LogProcessor trait**: 统一的处理器接口,所有处理器(终端、文件、UDP)都实现此接口
- **ProcessorManager**: 协调管理多个处理器的核心组件
- **LogCommand 枚举**: 统一的命令格式,支持写入、轮转、压缩、刷新、关闭等操作
- **批量处理**: 智能批量处理策略,大幅提升性能
- **开发模式**: 可选的同步模式,确保日志立即输出,便于调试和学习

### 工作流程

1. **日志记录**: 主线程调用 `log()` 方法
2. **序列化**: 使用 bincode 2.x 将日志记录序列化为字节
3. **广播**: 将序列化后的数据广播到所有已注册的处理器工作线程
4. **异步处理**: 每个工作线程异步处理接收到的数据
5. **批量优化**: 处理器根据配置进行批量处理以优化性能
6. **输出**: 最终输出到相应目标(终端、文件、网络等)

### 技术特点

- **完全异步**: 所有IO操作都是异步的,不阻塞主线程
- **线程安全**: 使用 crossbeam-channel 进行无锁线程间通信
- **零拷贝**: 在关键路径上使用零拷贝技术
- **内存高效**: 智能缓冲区管理,避免内存浪费
- **跨平台优化**: 针对不同平台的同步策略优化

## 日志级别

rat_logger 支持标准的日志级别(从低到高):

- `Trace` - 最详细的日志信息
- `Debug` - 调试信息
- `Info` - 一般信息
- `Warn` - 警告信息
- `Error` - 错误信息

每个级别都有相应的日志宏:`trace!`、`debug!`、`info!`、`warn!`、`error!`

## 配置系统

### 格式配置 (FormatConfig)

```rust
pub struct FormatConfig {
    pub timestamp_format: String,    // 时间戳格式
    pub level_style: LevelStyle,     // 日志级别样式
    pub format_template: String,     // 格式模板(通用模板)
    pub level_templates: Option<LevelTemplates>, // 各级别专用模板
}

pub struct LevelTemplates {
    pub error: Option<String>,  // ERROR 级别模板
    pub warn: Option<String>,   // WARN 级别模板
    pub info: Option<String>,    // INFO 级别模板
    pub debug: Option<String>,   // DEBUG 级别模板
    pub trace: Option<String>,   // TRACE 级别模板
}

pub struct LevelStyle {
    pub error: String,  // 错误级别显示
    pub warn: String,   // 警告级别显示
    pub info: String,   // 信息级别显示
    pub debug: String,  // 调试级别显示
    pub trace: String,  // 跟踪级别显示
}
```

#### 各级别模板与继承机制

通过 `level_templates` 可以为每个日志级别配置独立模板,模板设为 `"+"` 则继承通用模板:

```rust
let format_config = FormatConfig {
    timestamp_format: "%Y-%m-%d %H:%M:%S%.3f".to_string(),
    level_style: LevelStyle::default(),
    // 通用模板(用于 DEBUG/ERROR/TRACE)
    format_template: "{timestamp} [{level}] {target}:{line} - {message}".to_string(),
    // INFO/WARN 用简洁模板,DEBUG/ERROR/TRACE 用 "+" 继承通用模板
    level_templates: Some(LevelTemplates {
        info: Some("{timestamp} [{level}] {message}".to_string()),  // 简洁模板
        warn: Some("{timestamp} [{level}] {message}".to_string()),  // 简洁模板
        debug: Some("+".to_string()),  // 继承通用模板
        error: Some("+".to_string()),  // 继承通用模板
        trace: Some("+".to_string()),  // 继承通用模板
    }),
};
```

**模板变量说明:**
- `{timestamp}` - 时间戳
- `{level}` - 日志级别(如 INFO、DEBUG)
- `{target}` - 模块路径(如 `rat_engine2::server::http::router`- `{file}` - 文件名
- `{line}` - 行号
- `{message}` - 日志消息

**效果示例:**
- DEBUG/ERROR/TRACE: `2026-02-04 21:40:30 [INFO] rat_engine2::server::http::router:785 - 消息内容`
- INFO/WARN: `2026-02-04 21:40:30 [INFO] 消息内容`

### 颜色配置 (ColorConfig)

```rust
pub struct ColorConfig {
    pub error: String,      // 错误级别颜色 (ANSI)
    pub warn: String,       // 警告级别颜色
    pub info: String,       // 信息级别颜色
    pub debug: String,      // 调试级别颜色
    pub trace: String,      // 跟踪级别颜色
    pub timestamp: String,  // 时间戳颜色
    pub target: String,     // 目标颜色
    pub file: String,       // 文件名颜色
    pub message: String,    // 消息颜色
}
```

### 文件配置 (FileConfig)

```rust
pub struct FileConfig {
    pub log_dir: PathBuf,              // 日志目录
    pub max_file_size: u64,             // 最大文件大小
    pub max_compressed_files: usize,    // 最大压缩文件数
    pub compression_level: u8,          // 压缩级别
    pub min_compress_threads: usize,    // 最小压缩线程数
    pub skip_server_logs: bool,        // 是否跳过服务器日志
    pub is_raw: bool,                  // 是否为原始日志
    pub compress_on_drop: bool,         // 退出时是否压缩
    pub force_sync: bool,               // 是否强制同步写入磁盘
    pub format: Option<FormatConfig>,  // 格式配置
}
```

### 网络配置 (NetworkConfig)

```rust
pub struct NetworkConfig {
    pub server_addr: String,    // 服务器地址
    pub server_port: u16,       // 服务器端口
    pub auth_token: String,     // 认证令牌
    pub app_id: String,         // 应用标识
}
```

### 终端配置 (TermConfig)

```rust
pub struct TermConfig {
    pub enable_color: bool,          // 是否启用颜色
    pub format: Option<FormatConfig>, // 格式配置
    pub color: Option<ColorConfig>,   // 颜色配置
}
```

## 格式和颜色使用示例

### 自定义终端格式

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FormatConfig, ColorConfig};
use rat_logger::handler::term::TermConfig;

fn main() {
    // 创建格式配置
    let format_config = FormatConfig {
        timestamp_format: "%Y-%m-%d %H:%M:%S%.3f".to_string(),
        level_style: rat_logger::LevelStyle {
            error: "ERROR".to_string(),
            warn: "WARN ".to_string(),
            info: "INFO ".to_string(),
            debug: "DEBUG".to_string(),
            trace: "TRACE".to_string(),
        },
        format_template: "[{level}] {timestamp} {target}:{line} - {message}".to_string(),
    };

    // 创建颜色配置
    let color_config = ColorConfig {
        error: "\x1b[91m".to_string(),      // 亮红色
        warn: "\x1b[93m".to_string(),       // 亮黄色
        info: "\x1b[92m".to_string(),       // 亮绿色
        debug: "\x1b[96m".to_string(),      // 亮青色
        trace: "\x1b[95m".to_string(),      // 亮紫色
        timestamp: "\x1b[90m".to_string(),  // 深灰色
        target: "\x1b[94m".to_string(),     // 亮蓝色
        file: "\x1b[95m".to_string(),      // 亮紫色
        message: "\x1b[97m".to_string(),     // 亮白色
    };

    // 创建带配置的终端处理器
    let logger = LoggerBuilder::new()
        .with_level(LevelFilter::Debug)
        .add_terminal_with_config(TermConfig {
            enable_color: true,
            format: Some(format_config),
            color: Some(color_config),
        })
        .build();
}
```

### 自定义文件格式

```rust
use rat_logger::{LoggerBuilder, LevelFilter, FileConfig, FormatConfig};
use std::path::PathBuf;

fn main() {
    // 创建JSON格式配置
    let json_format = FormatConfig {
        timestamp_format: "%Y-%m-%dT%H:%M:%S%.3fZ".to_string(),
        level_style: rat_logger::LevelStyle {
            error: "error".to_string(),
            warn: "warn".to_string(),
            info: "info".to_string(),
            debug: "debug".to_string(),
            trace: "trace".to_string(),
        },
        format_template: r#"{{"timestamp":"{timestamp}","level":"{level}","target":"{target}","message":"{message}"}}"#.to_string(),
    };

    // 创建带格式配置的文件处理器
    let file_config = FileConfig {
        log_dir: PathBuf::from("./logs"),
        max_file_size: 10 * 1024 * 1024,  // 10MB
        max_compressed_files: 5,
        compression_level: 6,
        min_compress_threads: 2,
        skip_server_logs: false,
        is_raw: false,
        compress_on_drop: false,
        force_sync: false,      // 异步写入,性能更好
        format: Some(json_format),  // 使用自定义格式
    };

    let logger = LoggerBuilder::new()
        .with_level(LevelFilter::Info)
        .add_file(file_config)
        .build();
}
```

## 性能特性

- **生产者-消费者架构**: 分离日志生成和处理,避免阻塞主线程
- **批量写入**: 8KB 阈值或 100ms 间隔的智能批量写入
- **异步压缩**: 使用线程池进行异步文件压缩
- **跨平台优化**: 针对不同平台的同步策略优化
- **零拷贝**: 在关键路径上使用零拷贝技术
- **内存高效**: 智能缓冲区管理,避免内存浪费

### 性能基准测试结果

在 MacBook Air M1 本机环境下的性能表现(仅供参考):

#### 新版本 v0.2.3 性能(异步广播架构)
- 终端输出: **2,264,813 消息/秒** - 提升5.6倍
- 文件输出: **2,417,040 消息/秒** - 提升5.9倍
- 终端+文件: **1,983,192 消息/秒** - 提升3.9倍
- 多线程环境: **3,538,831 消息/秒** - 提升14.7倍 ⭐
- 不同日志级别: **4.3M-4.7M 消息/秒** - 提升2.5-5.6倍

#### 历史版本性能(对比参考)
- 终端输出: ~400,000+ 消息/秒(优化后)
- 文件输出: ~408,025 消息/秒
- 终端+文件: ~501,567 消息/秒
- 多线程环境: ~239,808 消息/秒
- 不同日志级别: 833K-1.7M 消息/秒

#### UDP网络传输性能 (test_client测试结果)
- 100条消息批处理: **806,452 消息/秒**
- 1000条消息批处理: **1,215,498 消息/秒**
- 5000条消息批处理: **1,087,627 消息/秒**

*注:UDP网络传输测试基于test_client工具和本机loopback接口(127.0.0.1),使用release模式编译,实际网络环境下性能可能因网络条件而异*

## 线程安全

rat_logger 完全支持多线程环境:

- 使用 crossbeam-channel 进行无锁线程间通信
- 支持多线程并发写入,无数据竞争风险
- 原子操作用于统计信息收集
- 在高并发场景下保持稳定性能

## 压缩支持

内置日志文件压缩功能:

- 使用 LZ4 压缩算法,平衡压缩率和性能
- 可配置压缩级别 (1-9)
- 异步压缩线程池,不阻塞主线程
- 自动清理旧压缩文件

## 网络传输

支持通过 UDP 协议发送日志:

- 基于 bincode 的高效序列化
- 支持基于令牌的认证机制
- 兼容 zerg_creep 的 UDP 包格式
- 批量网络发送优化

## 错误处理

rat_logger 提供了完善的错误处理机制:

- 内部错误不会影响主程序运行
- 优雅的错误恢复机制
- 详细的错误日志记录
- 可配置的错误处理策略

## 依赖项

```toml
[dependencies]
rat_logger = "0.2.9"
```

## 许可证

本项目采用 LGPLv3 许可证。详见 [LICENSE](LICENSE) 文件。

## 贡献

欢迎提交 Issue 和 Pull Request 来改进 rat_logger。

## 更新日志

详细的版本更新记录请查看 [CHANGELOG.md](CHANGELOG.md)。

## 示例代码

项目包含完整的示例代码:

- `examples/env_log_example.rs` - 环境变量RUST_LOG配置示例,最简单的使用方式
- `examples/basic_usage.rs` - 基础使用示例,展示多种输出方式
- `examples/composite_handler.rs` - 多输出处理器示例,终端+文件同时输出
- `examples/file_rotation.rs` - 文件轮转和压缩功能测试
- `examples/sync_async_demo.rs` - 同步与异步模式对比演示
- `examples/term_format_example.rs` - 终端格式配置和颜色设置示例
- `examples/file_format_example.rs` - 文件格式配置示例,包括JSON格式
- `examples/color_format_example.rs` - 颜色格式配置示例
- `examples/macro_format_example.rs` - 宏与格式配置结合使用示例
- `examples/macro_example.rs` - 日志宏使用示例,支持全局初始化
- `examples/pm2_style_logging.rs` - PM2风格多文件日志管理

所有示例都启用了开发模式以确保日志立即输出。在生产环境中使用时,请移除 `with_dev_mode(true)` 配置以获得最佳性能。