@@ -6,37 +6,107 @@ import (
66 "io/ioutil"
77 "log"
88 "os"
9+ "path/filepath"
10+ "strconv"
11+
12+ "gopkg.in/natefinch/lumberjack.v2"
913)
1014
11- // 初始化日志
1215var (
1316 Trace * log.Logger
1417 Info * log.Logger
1518 Warning * log.Logger
1619 Error * log.Logger
1720)
1821
19- // InitLogger TODO
22+ // getConfigSafe 安全获取配置,不存在返回默认值
23+ func getConfigSafe (key , defaultVal string ) string {
24+ val := config .GetConfig (key )
25+ if val == "" || val == key { // 有些配置系统找不到会返回key本身
26+ return defaultVal
27+ }
28+ return val
29+ }
30+
31+ // parseIntSafe 安全解析整数
32+ func parseIntSafe (s string , defaultVal int ) int {
33+ if i , err := strconv .Atoi (s ); err == nil {
34+ return i
35+ }
36+ return defaultVal
37+ }
38+
39+ // parseBoolSafe 安全解析布尔值
40+ func parseBoolSafe (s string , defaultVal bool ) bool {
41+ if b , err := strconv .ParseBool (s ); err == nil {
42+ return b
43+ }
44+ return defaultVal
45+ }
46+
47+ // InitLogger 初始化带轮转的日志
2048func InitLogger () {
21- errFile , err := os .OpenFile (config .GetConfig ("error_log_path" ),
22- os .O_CREATE | os .O_WRONLY | os .O_APPEND , 0666 )
23- if err != nil {
24- log .Fatalln ("Failed to open error log file:" , err )
49+ errorLogPath := config .GetConfig ("error_log_path" )
50+ infoLogPath := config .GetConfig ("info_log_path" )
51+
52+ // 确保日志目录存在
53+ for _ , path := range []string {errorLogPath , infoLogPath } {
54+ if dir := filepath .Dir (path ); dir != "." {
55+ if err := os .MkdirAll (dir , 0755 ); err != nil {
56+ log .Fatalf ("创建日志目录 %s 失败: %v" , dir , err )
57+ }
58+ }
59+ }
60+
61+ // 读取配置(不存在则使用默认值,不会报错)
62+ maxSize := parseIntSafe (getConfigSafe ("log_max_size" , "100" ), 100 )
63+ maxBackups := parseIntSafe (getConfigSafe ("log_max_backups" , "10" ), 10 )
64+ maxAge := parseIntSafe (getConfigSafe ("log_max_age" , "7" ), 7 )
65+ compress := parseBoolSafe (getConfigSafe ("log_compress" , "true" ), true )
66+ toConsole := parseBoolSafe (getConfigSafe ("log_to_console" , "false" ), false )
67+
68+ // 创建写入器
69+ errorWriter := & lumberjack.Logger {
70+ Filename : errorLogPath ,
71+ MaxSize : maxSize ,
72+ MaxBackups : maxBackups ,
73+ MaxAge : maxAge ,
74+ Compress : compress ,
75+ LocalTime : true ,
76+ }
77+
78+ infoWriter := & lumberjack.Logger {
79+ Filename : infoLogPath ,
80+ MaxSize : maxSize ,
81+ MaxBackups : maxBackups ,
82+ MaxAge : maxAge ,
83+ Compress : compress ,
84+ LocalTime : true ,
85+ }
86+
87+ // 构建输出目标
88+ var errorDest io.Writer = errorWriter
89+ var infoDest io.Writer = infoWriter
90+
91+ if toConsole {
92+ errorDest = io .MultiWriter (errorWriter , os .Stderr )
93+ infoDest = io .MultiWriter (infoWriter , os .Stdout )
2594 }
2695
96+ // 初始化日志
2797 Trace = log .New (ioutil .Discard ,
2898 "TRACE: " ,
2999 log .Ldate | log .Ltime | log .Lshortfile )
30100
31- Info = log .New (os . Stdout ,
101+ Info = log .New (infoDest ,
32102 "INFO: " ,
33103 log .Ldate | log .Ltime | log .Lshortfile )
34104
35- Warning = log .New (os . Stdout ,
105+ Warning = log .New (infoDest ,
36106 "WARNING: " ,
37107 log .Ldate | log .Ltime | log .Lshortfile )
38108
39- Error = log .New (io . MultiWriter ( errFile ) ,
109+ Error = log .New (errorDest ,
40110 "ERROR: " ,
41111 log .Ldate | log .Ltime | log .Lshortfile )
42112}
0 commit comments