@@ -171,3 +171,76 @@ func TestLoggerCustomTimestamp(t *testing.T) {
171
171
_ , err := time .Parse (customTimeFormat , loggedTime )
172
172
assert .Error (t , err )
173
173
}
174
+
175
+ func BenchmarkLoggerWithConfig_withoutMapFields (b * testing.B ) {
176
+ e := echo .New ()
177
+
178
+ buf := new (bytes.Buffer )
179
+ mw := LoggerWithConfig (LoggerConfig {
180
+ Format : `{"time":"${time_rfc3339_nano}","id":"${id}","remote_ip":"${remote_ip}","host":"${host}","user_agent":"${user_agent}",` +
181
+ `"method":"${method}","uri":"${uri}","status":${status}, "latency":${latency},` +
182
+ `"latency_human":"${latency_human}","bytes_in":${bytes_in}, "path":"${path}", "referer":"${referer}",` +
183
+ `"bytes_out":${bytes_out}, "protocol":"${protocol}"}` + "\n " ,
184
+ Output : buf ,
185
+ })(func (c echo.Context ) error {
186
+ c .Request ().Header .Set (echo .HeaderXRequestID , "123" )
187
+ c .FormValue ("to force parse form" )
188
+ return c .String (http .StatusTeapot , "OK" )
189
+ })
190
+
191
+ f := make (url.Values )
192
+ f .Set ("csrf" , "token" )
193
+ f .Add ("multiple" , "1" )
194
+ f .Add ("multiple" , "2" )
195
+ req := httptest .NewRequest (http .MethodPost , "/test?lang=en&checked=1&checked=2" , strings .NewReader (f .Encode ()))
196
+ req .Header .Set ("Referer" , "https://echo.labstack.com/" )
197
+ req .Header .Set ("User-Agent" , "curl/7.68.0" )
198
+ req .Header .Add (echo .HeaderContentType , echo .MIMEApplicationForm )
199
+
200
+ b .ReportAllocs ()
201
+ b .ResetTimer ()
202
+
203
+ for i := 0 ; i < b .N ; i ++ {
204
+ rec := httptest .NewRecorder ()
205
+ c := e .NewContext (req , rec )
206
+ mw (c )
207
+ buf .Reset ()
208
+ }
209
+ }
210
+
211
+ func BenchmarkLoggerWithConfig_withMapFields (b * testing.B ) {
212
+ e := echo .New ()
213
+
214
+ buf := new (bytes.Buffer )
215
+ mw := LoggerWithConfig (LoggerConfig {
216
+ Format : `{"time":"${time_rfc3339_nano}","id":"${id}","remote_ip":"${remote_ip}","host":"${host}","user_agent":"${user_agent}",` +
217
+ `"method":"${method}","uri":"${uri}","status":${status}, "latency":${latency},` +
218
+ `"latency_human":"${latency_human}","bytes_in":${bytes_in}, "path":"${path}", "referer":"${referer}",` +
219
+ `"bytes_out":${bytes_out},"ch":"${header:X-Custom-Header}", "protocol":"${protocol}"` +
220
+ `"us":"${query:username}", "cf":"${form:csrf}", "Referer2":"${header:Referer}"}` + "\n " ,
221
+ Output : buf ,
222
+ })(func (c echo.Context ) error {
223
+ c .Request ().Header .Set (echo .HeaderXRequestID , "123" )
224
+ c .FormValue ("to force parse form" )
225
+ return c .String (http .StatusTeapot , "OK" )
226
+ })
227
+
228
+ f := make (url.Values )
229
+ f .Set ("csrf" , "token" )
230
+ f .Add ("multiple" , "1" )
231
+ f .Add ("multiple" , "2" )
232
+ req := httptest .NewRequest (http .MethodPost , "/test?lang=en&checked=1&checked=2" , strings .NewReader (f .Encode ()))
233
+ req .Header .Set ("Referer" , "https://echo.labstack.com/" )
234
+ req .Header .Set ("User-Agent" , "curl/7.68.0" )
235
+ req .Header .Add (echo .HeaderContentType , echo .MIMEApplicationForm )
236
+
237
+ b .ReportAllocs ()
238
+ b .ResetTimer ()
239
+
240
+ for i := 0 ; i < b .N ; i ++ {
241
+ rec := httptest .NewRecorder ()
242
+ c := e .NewContext (req , rec )
243
+ mw (c )
244
+ buf .Reset ()
245
+ }
246
+ }
0 commit comments