@@ -8,33 +8,35 @@ use tauri::{AppHandle, Manager};
88static LOG_DIRECTORY : Mutex < Option < PathBuf > > = Mutex :: new ( None ) ;
99
1010pub fn setup_logger ( app : & AppHandle ) -> Result < ( ) , fern:: InitError > {
11- // 获取日志目录(可能是自定义的,也可能是默认的)
11+ // 获取日志目录
1212 let log_dir = get_effective_log_directory ( app) ;
1313
1414 // 创建日志目录
1515 if let Err ( e) = fs:: create_dir_all ( & log_dir) {
1616 eprintln ! ( "Failed to create log directory: {}" , e) ;
17- // 如果自定义目录创建失败,回退到默认目录
1817 let default_dir = get_default_log_directory ( app) ;
1918 fs:: create_dir_all ( & default_dir) . expect ( "Failed to create default log directory" ) ;
2019
21- // 更新为默认目录
2220 {
2321 let mut guard = LOG_DIRECTORY . lock ( ) . unwrap ( ) ;
24- * guard = None ; // 清除自定义设置
22+ * guard = None ;
2523 }
2624
2725 warn ! ( "日志目录创建失败,使用默认目录: {:?}" , default_dir) ;
28- } else {
29- info ! ( "日志目录: {:?}" , log_dir) ;
3026 }
3127
3228 // 生成当天的日志文件名
3329 let today = Local :: now ( ) . format ( "%Y-%m-%d" ) . to_string ( ) ;
34- let log_file = log_dir. join ( format ! ( "codeforge-{}.log" , today) ) ;
3530
36- // 配置日志
37- fern:: Dispatch :: new ( )
31+ // 不同级别的日志文件
32+ let all_log_file = log_dir. join ( format ! ( "codeforge-{}.log" , today) ) ;
33+ let error_log_file = log_dir. join ( format ! ( "codeforge-error-{}.log" , today) ) ;
34+ let warn_log_file = log_dir. join ( format ! ( "codeforge-warn-{}.log" , today) ) ;
35+ let info_log_file = log_dir. join ( format ! ( "codeforge-info-{}.log" , today) ) ;
36+ let debug_log_file = log_dir. join ( format ! ( "codeforge-debug-{}.log" , today) ) ;
37+
38+ // 基础配置
39+ let base_config = fern:: Dispatch :: new ( )
3840 . format ( |out, message, record| {
3941 out. finish ( format_args ! (
4042 "[{}] [{}] [{}:{}] {}" ,
@@ -45,17 +47,40 @@ pub fn setup_logger(app: &AppHandle) -> Result<(), fern::InitError> {
4547 message
4648 ) )
4749 } )
48- . level ( LevelFilter :: Debug ) // 设置日志级别
49- . level_for ( "hyper" , LevelFilter :: Warn ) // 减少第三方库的日志
50+ . level ( LevelFilter :: Debug )
51+ . level_for ( "hyper" , LevelFilter :: Warn )
5052 . level_for ( "reqwest" , LevelFilter :: Warn )
51- . level_for ( "tauri" , LevelFilter :: Info ) // Tauri 框架日志
52- . chain ( std:: io:: stdout ( ) ) // 同时输出到控制台
53- . chain ( fern:: log_file ( & log_file) ?) // 输出到文件
53+ . level_for ( "tauri" , LevelFilter :: Info ) ;
54+
55+ // 配置不同级别的日志输出
56+ base_config
57+ . chain ( std:: io:: stdout ( ) ) // 控制台输出
58+ . chain ( fern:: log_file ( & all_log_file) ?) // 所有级别写入总文件
59+ . chain (
60+ fern:: Dispatch :: new ( )
61+ . filter ( |metadata| metadata. level ( ) == log:: Level :: Error )
62+ . chain ( fern:: log_file ( & error_log_file) ?) ,
63+ )
64+ . chain (
65+ fern:: Dispatch :: new ( )
66+ . filter ( |metadata| metadata. level ( ) == log:: Level :: Warn )
67+ . chain ( fern:: log_file ( & warn_log_file) ?) ,
68+ )
69+ . chain (
70+ fern:: Dispatch :: new ( )
71+ . filter ( |metadata| metadata. level ( ) == log:: Level :: Info )
72+ . chain ( fern:: log_file ( & info_log_file) ?) ,
73+ )
74+ . chain (
75+ fern:: Dispatch :: new ( )
76+ . filter ( |metadata| metadata. level ( ) == log:: Level :: Debug )
77+ . chain ( fern:: log_file ( & debug_log_file) ?) ,
78+ )
5479 . apply ( ) ?;
5580
5681 info ! ( "CodeForge 应用启动" ) ;
5782 info ! ( "应用版本: {}" , env!( "CARGO_PKG_VERSION" ) ) ;
58- info ! ( "日志文件: {:? }" , log_file ) ;
83+ info ! ( "日志文件目录 { }" , log_dir . display ( ) ) ;
5984
6085 Ok ( ( ) )
6186}
0 commit comments