@@ -11,57 +11,94 @@ import (
1111 "time"
1212)
1313
14- const (
15- zapLogDir = "log"
16- zapLogSoftLink = "latest_log"
17- zapModule = "gin-vue-admin"
14+ var (
15+ err error
16+ level zapcore. Level
17+ writer zapcore. WriteSyncer
1818)
1919
2020func init () {
21- if global .GVA_CONFIG .Zap .File == "" {
22- global .GVA_CONFIG .Zap .File = "DEBUG"
21+ if ok , _ := utils .PathExists (global .GVA_CONFIG .Zap .Director ); ! ok { // 判断是否有logs文件夹
22+ fmt .Println ("create logs directory" ) // directory not exist
23+ _ = os .Mkdir (global .GVA_CONFIG .Zap .Director , os .ModePerm )
2324 }
24- if ok , _ := utils .PathExists (zapLogDir ); ! ok {
25- // directory not exist
26- fmt .Println ("create log directory" )
27- _ = os .Mkdir (zapLogDir , os .ModePerm )
25+
26+ switch global .GVA_CONFIG .Zap .Level {// 初始化配置文件的Level
27+ case "debug" :
28+ level = zap .DebugLevel
29+ case "info" :
30+ level = zap .InfoLevel
31+ case "warn" :
32+ level = zap .WarnLevel
33+ case "error" :
34+ level = zap .ErrorLevel
35+ default :
36+ level = zap .InfoLevel
2837 }
29- var l = new (zapcore. Level )
30- writeSyncer , err : = getWriteSyncer ()
38+
39+ writer , err = getWriteSyncer () // 使用file-rotatelogs进行日志分割
3140 if err != nil {
3241 fmt .Printf ("Get Write Syncer Failed err:%v" , err .Error ())
3342 return
3443 }
35- encoder := getEncoderConfig ()
36- if err := l .UnmarshalText ([]byte (global .GVA_CONFIG .Zap .Level )); err != nil {
37- fmt .Printf ("Unmarshal Level Failed err:%v" , err .Error ())
44+
45+ if level == zap .DebugLevel || level == zap .ErrorLevel {
46+ global .GVA_ZAP = zap .New (getEncoderCore (), zap .AddStacktrace (level ))
47+ if global .GVA_CONFIG .Zap .ShowLine {
48+ global .GVA_ZAP .WithOptions (zap .AddCaller ())
49+ }
3850 return
3951 }
40- core := zapcore .NewCore (encoder , writeSyncer , l )
41- global .GVA_ZAP = zap .New (core , zap .AddCaller ())
52+ global .GVA_ZAP = zap .New (getEncoderCore ())
53+ if global .GVA_CONFIG .Zap .ShowLine {
54+ global .GVA_ZAP .WithOptions (zap .AddCaller ())
55+ }
56+
4257}
4358
4459// getWriteSyncer zap logger中加入file-rotatelogs
4560func getWriteSyncer () (zapcore.WriteSyncer , error ) {
4661 fileWriter , err := zaprotatelogs .New (
47- zapLogDir + string (os .PathSeparator ) + "%Y-%m-%d-%H-%M.log" ,
48- zaprotatelogs .WithLinkName (zapLogSoftLink ),
62+ global . GVA_CONFIG . Zap . Director + string (os .PathSeparator )+ "%Y-%m-%d-%H-%M.log" ,
63+ zaprotatelogs .WithLinkName (global . GVA_CONFIG . Zap . LinkName ),
4964 zaprotatelogs .WithMaxAge (7 * 24 * time .Hour ),
5065 zaprotatelogs .WithRotationTime (24 * time .Hour ),
5166 )
67+ if global .GVA_CONFIG .Zap .LogInConsole {
68+ return zapcore .NewMultiWriteSyncer (zapcore .AddSync (os .Stdout ), zapcore .AddSync (fileWriter )), err
69+ }
5270 return zapcore .AddSync (fileWriter ), err
5371}
5472
55- // getEncoderConfig 获取zapcore.Encoder
56- func getEncoderConfig () zapcore.Encoder {
57- encoderConfig := zap .NewProductionEncoderConfig ()
58- encoderConfig .EncodeTime = zapcore .ISO8601TimeEncoder
59- encoderConfig .TimeKey = "time"
60- encoderConfig .EncodeLevel = zapcore .CapitalLevelEncoder
61- encoderConfig .EncodeDuration = zapcore .SecondsDurationEncoder
62- encoderConfig .EncodeCaller = zapcore .ShortCallerEncoder
63- return zapcore .NewConsoleEncoder (encoderConfig )
73+ // getEncoderConfig 获取zapcore.EncoderConfig
74+ func getEncoderConfig () (config zapcore.EncoderConfig ) {
75+ config = zapcore.EncoderConfig {
76+ MessageKey : "message" ,
77+ LevelKey : "level" ,
78+ TimeKey : "time" ,
79+ NameKey : "logger" ,
80+ CallerKey : "caller" ,
81+ StacktraceKey : "stacktrace" ,
82+ LineEnding : zapcore .DefaultLineEnding ,
83+ EncodeLevel : zapcore .CapitalColorLevelEncoder ,
84+ EncodeTime : CustomTimeEncoder ,
85+ EncodeDuration : zapcore .SecondsDurationEncoder ,
86+ EncodeCaller : zapcore .FullCallerEncoder ,
87+ }
88+ return config
6489}
6590
91+ // getEncoder 获取zapcore.Encoder
92+ func getEncoder () zapcore.Encoder {
93+ return zapcore .NewConsoleEncoder (getEncoderConfig ())
94+ }
6695
96+ // getEncoderCore 获取Encoder的zapcore.Core
97+ func getEncoderCore () (core zapcore.Core ) {
98+ return zapcore .NewCore (getEncoder (), writer , level )
99+ }
67100
101+ // 自定义日志输出时间格式
102+ func CustomTimeEncoder (t time.Time , enc zapcore.PrimitiveArrayEncoder ) {
103+ enc .AppendString (t .Format (global .GVA_CONFIG .Zap .Prefix + "2006/01/02 - 15:04:05.000" ))
104+ }
0 commit comments