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
//! Logging driver for reovim.
//!
//! This driver implements the kernel's `Logger` trait using the tracing ecosystem.
//! It bridges kernel `pr_*!` macros to tracing subscribers.
//!
//! # Architecture
//!
//! Following Linux kernel design (mechanism vs policy):
//! - **Kernel provides mechanism**: `Logger` trait, `Level`, `Record`, `pr_*!` macros
//! - **This driver provides policy**: Where logs go, formatting, filtering
//!
//! ```text
//! ┌─────────────────────────────────────────────────────────────────┐
//! │ User Code │
//! │ pr_info!("buffer {} opened", id); │
//! └─────────────────────────────────────────────────────────────────┘
//! │
//! ▼
//! ┌─────────────────────────────────────────────────────────────────┐
//! │ Kernel (printk/) │
//! │ Level │ Record │ Logger trait │ Global OnceLock │
//! └─────────────────────────────────────────────────────────────────┘
//! │
//! ▼
//! ┌─────────────────────────────────────────────────────────────────┐
//! │ Driver (drivers/log/) │
//! │ TracingLogger │ LogConfig │ init_logging() │
//! └─────────────────────────────────────────────────────────────────┘
//! │
//! ▼
//! ┌─────────────────────────────────────────────────────────────────┐
//! │ tracing ecosystem │
//! │ tracing │ tracing-subscriber │ tracing-appender │
//! └─────────────────────────────────────────────────────────────────┘
//! ```
//!
//! # Usage
//!
//! ```rust,ignore
//! use reovim_driver_log::{TracingLogger, init_logging, LogConfig};
//! use reovim_kernel::api::v1::set_logger;
//!
//! // Step 1: Initialize tracing subscriber
//! let config = LogConfig::default();
//! init_logging(&config)?;
//!
//! // Step 2: Set TracingLogger as global kernel logger
//! static LOGGER: TracingLogger = TracingLogger;
//! set_logger(&LOGGER)?;
//!
//! // Step 3: Now pr_*! macros route to tracing
//! pr_info!("editor started");
//! pr_debug!("buffer count: {}", 5);
//! ```
//!
//! # Environment Variable
//!
//! Set `REOVIM_LOG` to control log level (overrides `LogConfig.level`):
//!
//! ```bash
//! REOVIM_LOG=debug reovim myfile.txt
//! REOVIM_LOG=trace reovim --log=- myfile.txt
//! REOVIM_LOG=reovim_kernel=trace,warn reovim myfile.txt # Fine-grained control
//! ```
//!
//! # Output Formats
//!
//! - **Plain**: `2024-01-15T10:30:00Z INFO file.rs:42 message`
//! - **JSON**: `{"timestamp":"...","level":"INFO","target":"...","message":"..."}`
//! - **Pretty**: Colorized output for terminal (development)
//!
//! # File Rotation
//!
//! When using `LogOutput::File`, log files can be rotated:
//! - `RotationPolicy::Never` - Single file
//! - `RotationPolicy::Daily` - Rotate at midnight UTC
//! - `RotationPolicy::Hourly` - Rotate every hour
// Configuration types
pub use ;
// Logger implementation
pub use ;
// Subscriber setup
pub use ;
// Re-export kernel types for convenience
pub use ;