1- package initialize
1+ package internal
22
33import (
44 "context"
@@ -13,25 +13,28 @@ import (
1313 "time"
1414)
1515
16+ // writer log writer interface
17+ type writer interface {
18+ Printf (string , ... interface {})
19+ }
20+
21+ type config struct {
22+ SlowThreshold time.Duration
23+ Colorful bool
24+ LogLevel logger.LogLevel
25+ }
26+
1627var (
17- Discard = New (log .New (ioutil .Discard , "" , log .LstdFlags ), log . New ( ioutil . Discard , "" , log . LstdFlags ), GormConfig {})
18- Default = New (log .New (os .Stdout , "\r \n " , log .LstdFlags ), log . New ( os . Stdout , " \r \n " , log . LstdFlags ), GormConfig {
28+ Discard = New (log .New (ioutil .Discard , "" , log .LstdFlags ), config {})
29+ Default = New (log .New (os .Stdout , "\r \n " , log .LstdFlags ), config {
1930 SlowThreshold : 200 * time .Millisecond ,
2031 LogLevel : logger .Warn ,
2132 Colorful : true ,
2233 })
2334 Recorder = traceRecorder {Interface : Default , BeginAt : time .Now ()}
2435)
2536
26- type traceRecorder struct {
27- logger.Interface
28- BeginAt time.Time
29- SQL string
30- RowsAffected int64
31- Err error
32- }
33-
34- func New (writer Writer , gormWriter logger.Writer , config GormConfig ) logger.Interface {
37+ func New (writer writer , config config ) logger.Interface {
3538 var (
3639 infoStr = "%s\n [info] "
3740 warnStr = "%s\n [warn] "
@@ -50,10 +53,9 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
5053 traceErrStr = logger .RedBold + "%s " + logger .MagentaBold + "%s\n " + logger .Reset + logger .Yellow + "[%.3fms] " + logger .BlueBold + "[rows:%v]" + logger .Reset + " %s"
5154 }
5255
53- return & GormLogger {
54- Writer : writer ,
55- gormWriter : gormWriter ,
56- GormConfig : config ,
56+ return & customLogger {
57+ writer : writer ,
58+ config : config ,
5759 infoStr : infoStr ,
5860 warnStr : warnStr ,
5961 errStr : errStr ,
@@ -63,81 +65,74 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
6365 }
6466}
6567
66- // Writer log writer interface
67- type Writer interface {
68- Printf (string , ... interface {})
69- }
70-
71- type GormConfig struct {
72- SlowThreshold time.Duration
73- Colorful bool
74- LogLevel logger.LogLevel
75- }
76-
77- type GormLogger struct {
78- Writer
79- gormWriter logger.Writer
80- GormConfig
68+ type customLogger struct {
69+ writer
70+ config
8171 infoStr , warnStr , errStr string
8272 traceStr , traceErrStr , traceWarnStr string
8373}
8474
85- func (g * GormLogger ) LogMode (level logger.LogLevel ) logger.Interface {
86- newLogger := * g
75+ // LogMode log mode
76+ func (c * customLogger ) LogMode (level logger.LogLevel ) logger.Interface {
77+ newLogger := * c
8778 newLogger .LogLevel = level
8879 return & newLogger
8980}
9081
91- func (g * GormLogger ) Info (ctx context.Context , message string , data ... interface {}) {
92- if g .LogLevel >= logger .Info {
93- g .Printf (g .infoStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
82+ // Info print info
83+ func (c * customLogger ) Info (ctx context.Context , message string , data ... interface {}) {
84+ if c .LogLevel >= logger .Info {
85+ c .Printf (c .infoStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
9486 }
9587}
9688
97- func (g * GormLogger ) Warn (ctx context.Context , message string , data ... interface {}) {
98- if g .LogLevel >= logger .Warn {
99- g .Printf (g .warnStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
89+ // Warn print warn messages
90+ func (c * customLogger ) Warn (ctx context.Context , message string , data ... interface {}) {
91+ if c .LogLevel >= logger .Warn {
92+ c .Printf (c .warnStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
10093 }
10194}
10295
103- func (g * GormLogger ) Error (ctx context.Context , message string , data ... interface {}) {
104- if g .LogLevel >= logger .Error {
105- g .Printf (g .errStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
96+ // Error print error messages
97+ func (c * customLogger ) Error (ctx context.Context , message string , data ... interface {}) {
98+ if c .LogLevel >= logger .Error {
99+ c .Printf (c .errStr + message , append ([]interface {}{utils .FileWithLineNum ()}, data ... )... )
106100 }
107101}
108102
109- func (g * GormLogger ) Trace (ctx context.Context , begin time.Time , fc func () (string , int64 ), err error ) {
110- if g .LogLevel > 0 {
103+ // Trace print sql message
104+ func (c * customLogger ) Trace (ctx context.Context , begin time.Time , fc func () (string , int64 ), err error ) {
105+ if c .LogLevel > 0 {
111106 elapsed := time .Since (begin )
112107 switch {
113- case err != nil && g .LogLevel >= logger .Error :
108+ case err != nil && c .LogLevel >= logger .Error :
114109 sql , rows := fc ()
115110 if rows == - 1 {
116- g .Printf (g .traceErrStr , utils .FileWithLineNum (), err , float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
111+ c .Printf (c .traceErrStr , utils .FileWithLineNum (), err , float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
117112 } else {
118- g .Printf (g .traceErrStr , utils .FileWithLineNum (), err , float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
113+ c .Printf (c .traceErrStr , utils .FileWithLineNum (), err , float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
119114 }
120- case elapsed > g .SlowThreshold && g .SlowThreshold != 0 && g .LogLevel >= logger .Warn :
115+ case elapsed > c .SlowThreshold && c .SlowThreshold != 0 && c .LogLevel >= logger .Warn :
121116 sql , rows := fc ()
122- slowLog := fmt .Sprintf ("SLOW SQL >= %v" , g .SlowThreshold )
117+ slowLog := fmt .Sprintf ("SLOW SQL >= %v" , c .SlowThreshold )
123118 if rows == - 1 {
124- g .Printf (g .traceWarnStr , utils .FileWithLineNum (), slowLog , float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
119+ c .Printf (c .traceWarnStr , utils .FileWithLineNum (), slowLog , float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
125120 } else {
126- g .Printf (g .traceWarnStr , utils .FileWithLineNum (), slowLog , float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
121+ c .Printf (c .traceWarnStr , utils .FileWithLineNum (), slowLog , float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
127122 }
128- case g .LogLevel >= logger .Info :
123+ case c .LogLevel >= logger .Info :
129124 sql , rows := fc ()
130125 if rows == - 1 {
131- g .Printf (g .traceStr , utils .FileWithLineNum (), float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
126+ c .Printf (c .traceStr , utils .FileWithLineNum (), float64 (elapsed .Nanoseconds ())/ 1e6 , "-" , sql )
132127 } else {
133- g .Printf (g .traceStr , utils .FileWithLineNum (), float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
128+ c .Printf (c .traceStr , utils .FileWithLineNum (), float64 (elapsed .Nanoseconds ())/ 1e6 , rows , sql )
134129 }
135130 }
136131 }
137132}
138133
139- func (g * GormLogger ) Printf (message string , data ... interface {}) {
140- if global .GVA_CONFIG .Mysql .LogZap == "Info" && ! global . GVA_CONFIG . Mysql . LogMode {
134+ func (c * customLogger ) Printf (message string , data ... interface {}) {
135+ if global .GVA_CONFIG .Mysql .LogZap != "" {
141136 switch len (data ) {
142137 case 0 :
143138 global .GVA_LOG .Info (message )
@@ -154,14 +149,34 @@ func (g *GormLogger) Printf(message string, data ...interface{}) {
154149 }
155150 switch len (data ) {
156151 case 0 :
157- g . gormWriter .Printf (message , "" )
152+ c . writer .Printf (message , "" )
158153 case 1 :
159- g . gormWriter .Printf (message , data [0 ].( string ) )
154+ c . writer .Printf (message , data [0 ])
160155 case 2 :
161- g . gormWriter .Printf (message , data [0 ].( string ) , data [1 ].( float64 ) )
156+ c . writer .Printf (message , data [0 ], data [1 ])
162157 case 3 :
163- g . gormWriter .Printf (message , data [0 ].( string ) , data [1 ].( float64 ) , data [2 ].( string ) )
158+ c . writer .Printf (message , data [0 ], data [1 ], data [2 ])
164159 case 4 :
165- g .gormWriter .Printf (message , data [0 ].(string ), data [1 ].(float64 ), data [2 ].(string ), data [3 ].(string ))
160+ c .writer .Printf (message , data [0 ], data [1 ], data [2 ], data [3 ])
161+ case 5 :
162+ c .writer .Printf (message , data [0 ], data [1 ], data [2 ], data [3 ], data [4 ])
166163 }
167164}
165+
166+ type traceRecorder struct {
167+ logger.Interface
168+ BeginAt time.Time
169+ SQL string
170+ RowsAffected int64
171+ Err error
172+ }
173+
174+ func (t traceRecorder ) New () * traceRecorder {
175+ return & traceRecorder {Interface : t .Interface , BeginAt : time .Now ()}
176+ }
177+
178+ func (t * traceRecorder ) Trace (ctx context.Context , begin time.Time , fc func () (string , int64 ), err error ) {
179+ t .BeginAt = begin
180+ t .SQL , t .RowsAffected = fc ()
181+ t .Err = err
182+ }
0 commit comments