tracing_plus/lib.rs
1//! 该库是对[tracing](https://docs.rs/tracing/latest/tracing/)库的增强
2//!
3//! 在项目的的根目录创建一个文件名为`tracing-log.toml`的文件,
4//! 该库会根据改配置文件动态的注册日志,
5//! 然后调用`init_tracing_log`方法即可完成[tracing](https://docs.rs/tracing/latest/tracing/)日志的初始化工作
6//!
7//! # 示例
8//!
9//! ```toml
10//! # 文件名 tracing-log.toml
11//! # 控制台输出配置
12//! [console]
13//! # 日志级别, 必填(可选值:`error`、`warn`、`info`、`debug`、`trace`)
14//! level = "info"
15//! # 是否打印线程名 默认为 true
16//! thread = true
17//! # 时间格式 默认为 "%Y-%m-%d %H:%M:%S"
18//! format = "%Y-%m-%d %H:%M:%S"
19//! # 是否打印行号 默认为 false
20//! line-number = true
21//!
22//! # 文件输出配置
23//! [[file]]
24//! # 日志级别, 必填(可选值:`error`、`warn`、`info`、`debug`、`trace`)
25//! level = "info"
26//! # 是否打印线程名 默认为 true
27//! thread = true
28//! # 时间格式 默认为 "%Y-%m-%d %H:%M:%S"
29//! format = "%Y-%m-%d %H:%M:%S"
30//! # 是否打印行号 默认为 false
31//! line-number = true
32//! # 保留的最大文件数量 默认为 30
33//! max-files = 60
34//! # 日志文件滚动的固定时间段,可选值: "minutely"、"hourly"、"daily"、"never", 默认值为: "daily"
35//! rotation = "daily"
36//! # 生成的文件名前缀, 必填
37//! prefix = "info"
38//! # 生成的文件名后缀, 默认值为: "log"
39//! suffix = "log"
40//! # 生成的文件所在目录前缀, 默认值为: "logs"
41//! directory = "logs"
42//! # 只记录`target`指定的值的日志 (不配置,则记录全部)
43//! target = "abc"
44//!
45//! [[file]]
46//! level = "error"
47//! thread = false
48//! format = "%Y-%m-%d %H:%M:%S"
49//! line-number = true
50//! max-files = 60
51//! rotation = "daily"
52//! prefix = "error"
53//! directory = "logs"
54//!
55//! [[file]]
56//! level = "worker"
57//! thread = false
58//! format = "%Y-%m-%d %H:%M:%S"
59//! line-number = true
60//! max-files = 60
61//! rotation = "daily"
62//! prefix = "error"
63//! directory = "logs"
64//! target = "worker"
65//! ```
66
67mod layer;
68mod config;
69
70
71use crate::config::TracingLog;
72use crate::layer::{get_console_layer, get_file_layer};
73use tracing_subscriber::layer::SubscriberExt;
74use tracing_subscriber::util::SubscriberInitExt;
75use tracing_subscriber::Registry;
76
77
78pub fn init_tracing_log(){
79 let config = TracingLog::config();
80 let console = &config.console;
81 let files = &config.file;
82
83 let console = get_console_layer(console);
84
85 let file_layers = files.iter()
86 .map(|file| get_file_layer(file))
87 .collect::<Vec<_>>();
88
89 Registry::default()
90 .with(console)
91 .with(file_layers)
92 .init();
93}