File tree 2 files changed +29
-1
lines changed
2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,8 @@ type config struct {
40
40
pathLevels map [string ]zerolog.Level
41
41
}
42
42
43
+ const loggerKey = "_gin-contrib/logger_"
44
+
43
45
var isTerm bool = isatty .IsTerminal (os .Stdout .Fd ())
44
46
45
47
// SetLogger initializes the logging middleware.
@@ -88,7 +90,6 @@ func SetLogger(opts ...Option) gin.HandlerFunc {
88
90
path = path + "?" + raw
89
91
}
90
92
91
- c .Next ()
92
93
track := true
93
94
94
95
if _ , ok := skip [path ]; ok || (cfg .skip != nil && cfg .skip (c )) {
@@ -106,6 +107,17 @@ func SetLogger(opts ...Option) gin.HandlerFunc {
106
107
}
107
108
}
108
109
110
+ if track {
111
+ l = l .With ().
112
+ Str ("method" , c .Request .Method ).
113
+ Str ("path" , path ).
114
+ Str ("ip" , c .ClientIP ()).
115
+ Str ("user_agent" , c .Request .UserAgent ()).Logger ()
116
+ }
117
+ c .Set (loggerKey , l )
118
+
119
+ c .Next ()
120
+
109
121
if track {
110
122
end := time .Now ()
111
123
if cfg .utc {
@@ -149,3 +161,8 @@ func SetLogger(opts ...Option) gin.HandlerFunc {
149
161
func ParseLevel (levelStr string ) (zerolog.Level , error ) {
150
162
return zerolog .ParseLevel (levelStr )
151
163
}
164
+
165
+ // Get return the logger associated with a gin context
166
+ func Get (c * gin.Context ) zerolog.Logger {
167
+ return c .MustGet (loggerKey ).(zerolog.Logger )
168
+ }
Original file line number Diff line number Diff line change @@ -70,6 +70,17 @@ func TestLogger(t *testing.T) {
70
70
assert .Contains (t , buffer .String (), "/example" )
71
71
assert .Contains (t , buffer .String (), "ERR" )
72
72
assert .Contains (t , buffer .String (), "path=/example?a=100" )
73
+
74
+ buffer .Reset ()
75
+ r .GET ("/example-with-additional-log" , func (ctx * gin.Context ) {
76
+ l := Get (ctx )
77
+ l .Info ().Msg ("additional log" )
78
+ })
79
+ performRequest (r , "GET" , "/example-with-additional-log" )
80
+ assert .Contains (t , buffer .String (), "200" )
81
+ assert .Contains (t , buffer .String (), "GET" )
82
+ assert .Contains (t , buffer .String (), "/example-with-additional-log" )
83
+ assert .Contains (t , buffer .String (), "additional log" )
73
84
}
74
85
75
86
func TestLoggerWithLogger (t * testing.T ) {
You can’t perform that action at this time.
0 commit comments