@@ -171,3 +171,76 @@ func TestLoggerCustomTimestamp(t *testing.T) {
171171 _ , err := time .Parse (customTimeFormat , loggedTime )
172172 assert .Error (t , err )
173173}
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