custom_utils/util_logger/
mod.rs1use crate::util_logger::builder::{DebugLevel, LoggerBuilder, LoggerFeatureBuilder};
2use builder::{simple_colored_with_thread_target, LoggerBuilder2};
3use flexi_logger::{LogSpecBuilder, LogSpecification, Logger, LoggerHandle, WriteMode};
4use log::LevelFilter;
5use std::fs;
6use std::path::PathBuf;
7
8mod builder;
9
10pub fn logger_stdout(level: impl Into<DebugLevel>) {
14 let specification = match level.into() {
15 DebugLevel::Filter(debug_level) => {
16 let mut log_spec_builder = LogSpecBuilder::new();
17 log_spec_builder.default(debug_level);
18 log_spec_builder.build()
19 }
20 DebugLevel::Env(default) => LogSpecification::env_or_parse(default).unwrap(),
21 };
22 Box::leak(Box::new(
23 Logger::with(specification)
24 .format(simple_colored_with_thread_target)
25 .write_mode(WriteMode::Direct)
26 .log_to_stdout()
27 .start()
28 .unwrap(),
29 ));
30}
31
32pub fn logger_stdout_debug() {
33 let _res = LoggerBuilder::default(LevelFilter::Debug)
34 .build_default()
35 .log_to_stdout()
36 ._start();
37}
38pub fn logger_stdout_info() {
39 let _res = LoggerBuilder::default(LevelFilter::Info)
40 .build_default()
41 .log_to_stdout()
42 ._start();
43}
44
45pub fn logger_feature(
59 app: &str,
60 debug_level: impl Into<DebugLevel>,
61 prod_level: LevelFilter,
62 log_etc_reset: bool,
63) -> LoggerFeatureBuilder {
64 let home = home::home_dir().unwrap();
65 let log_etc_path: PathBuf = home.join("etc");
66 if !log_etc_path.exists() {
67 std::fs::create_dir_all(&log_etc_path);
68 }
69 let log_path: PathBuf = home.join("log");
70 if !log_path.exists() {
71 std::fs::create_dir_all(&log_path);
72 }
73 logger_feature_with_path(
74 app,
75 debug_level,
76 prod_level,
77 log_etc_path,
78 log_etc_reset,
79 log_path,
80 )
81}
82
83pub fn logger_feature_with_path(
85 app: &str,
86 debug_level: impl Into<DebugLevel>,
87 prod_level: LevelFilter,
88 log_etc_path: PathBuf,
89 log_etc_reset: bool,
90 log_path: PathBuf,
91) -> LoggerFeatureBuilder {
92 if log_etc_reset && log_etc_path.exists() && log_etc_path.is_file() {
93 fs::remove_file(log_etc_path.clone()).unwrap();
94 }
95 LoggerFeatureBuilder::default(app, debug_level.into(), prod_level, log_etc_path, log_path)
96}