custom_utils/util_logger/
mod.rs

1use crate::util_logger::builder::{DebugLevel, LoggerBuilder, LoggerFeatureBuilder};
2use log::LevelFilter;
3use std::fs;
4use std::path::PathBuf;
5
6mod builder;
7
8/// 简单,纯粹想输出日志而已。适用于临时
9/// 控制台输出日志
10pub fn logger_stdout(lever: LevelFilter) -> LoggerBuilder {
11    LoggerBuilder::default(lever)
12}
13pub fn logger_stdout_debug() {
14    let _res = LoggerBuilder::default(LevelFilter::Debug)
15        .build_default()
16        .log_to_stdout()
17        ._start();
18}
19pub fn logger_stdout_info() {
20    let _res = LoggerBuilder::default(LevelFilter::Info)
21        .build_default()
22        .log_to_stdout()
23        ._start();
24}
25///
26/// let _ = custom_utils::logger::logger_feature("lapce", "warn,wgpu_core=error,lapce_app::keypress::loader=info", log::LevelFilter::Info, true)
27///         .build();
28/// let _ = custom_utils::logger::logger_feature("lapce", log::LevelFilter::Debug, log::LevelFilter::Info, true)
29///         .build();
30///
31/// 根据feature来确定日志输出
32///     log_etc_reset 配置文件每次重启都重置
33///     dev:控制台输出
34///     prod:在目录{user_home}/log/{app}输出日志;
35///         每天或大小达到10m更换日志文件;
36///         维持10个日志文件;
37///         生成{user_home}/etc/{app}/logspecification.toml的动态配置文件
38pub fn logger_feature(
39    app: &str,
40    debug_level: impl Into<DebugLevel>,
41    prod_level: LevelFilter,
42    log_etc_reset: bool,
43) -> LoggerFeatureBuilder {
44    let home = home::home_dir().unwrap();
45    let log_etc_path: PathBuf = home.join("etc");
46    if !log_etc_path.exists() {
47        std::fs::create_dir_all(&log_etc_path);
48    }
49    let log_path: PathBuf = home.join("log");
50    if !log_path.exists() {
51        std::fs::create_dir_all(&log_path);
52    }
53    logger_feature_with_path(app, debug_level, prod_level, log_etc_path, log_etc_reset, log_path)
54}
55
56/// log_etc_reset 配置文件每次重启都重置
57pub fn logger_feature_with_path(
58    app: &str,
59    debug_level: impl Into<DebugLevel>,
60    prod_level: LevelFilter,
61    log_etc_path: PathBuf,
62    log_etc_reset: bool,
63    log_path: PathBuf,
64) -> LoggerFeatureBuilder {
65    if log_etc_reset && log_etc_path.exists() && log_etc_path.is_file() {
66        fs::remove_file(log_etc_path.clone()).unwrap();
67    }
68    LoggerFeatureBuilder::default(app, debug_level.into(), prod_level, log_etc_path, log_path)
69}