Skip to content

Commit 25e72d6

Browse files
committed
Fixed recover and gzip middleware
Signed-off-by: Vishal Rana <[email protected]>
1 parent 76cfd2f commit 25e72d6

File tree

9 files changed

+49
-52
lines changed

9 files changed

+49
-52
lines changed

context.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ type (
2626
Context interface {
2727
netContext.Context
2828
Request() engine.Request
29-
SetResponse(engine.Response)
3029
Response() engine.Response
3130
Path() string
3231
P(int) string
@@ -111,11 +110,6 @@ func (c *context) Request() engine.Request {
111110
return c.request
112111
}
113112

114-
// SetResponse sets `engine.Response`.
115-
func (c *context) SetResponse(r engine.Response) {
116-
c.response = r
117-
}
118-
119113
// Response returns `engine.Response`.
120114
func (c *context) Response() engine.Response {
121115
return c.response

echo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ func New() (e *Echo) {
197197

198198
// Logger
199199
e.logger = log.New("echo")
200-
e.logger.SetLevel(log.FATAL)
200+
e.logger.SetLevel(log.ERROR)
201201

202202
return
203203
}
@@ -249,7 +249,7 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
249249
if !c.Response().Committed() {
250250
c.String(code, msg)
251251
}
252-
e.logger.Debug(err)
252+
e.logger.Error(err)
253253
}
254254

255255
// SetHTTPErrorHandler registers a custom Echo.HTTPErrorHandler.

engine/engine.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ type (
4040
Status() int
4141
Size() int64
4242
Committed() bool
43-
// SetWriter(io.Writer)
44-
// Writer() io.Writer
43+
SetWriter(io.Writer)
44+
Writer() io.Writer
4545
}
4646

4747
// Header defines an interface for HTTP header.

engine/fasthttp/response.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ func (r *Response) Committed() bool {
6262
return r.committed
6363
}
6464

65-
// func (r *Response) SetWriter(w io.Writer) {
66-
// r.writer = w
67-
// }
68-
//
69-
// func (r *Response) Writer() io.Writer {
70-
// return r.writer
71-
// }
65+
func (r *Response) SetWriter(w io.Writer) {
66+
r.writer = w
67+
}
68+
69+
func (r *Response) Writer() io.Writer {
70+
return r.writer
71+
}
7272

7373
func (r *Response) reset(c *fasthttp.RequestCtx, h engine.Header) {
7474
r.RequestCtx = c

engine/standard/response.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package standard
22

33
import (
4+
"io"
45
"net/http"
56

67
"github.com/labstack/echo/engine"
@@ -14,17 +15,17 @@ type (
1415
status int
1516
size int64
1617
committed bool
17-
// writer io.Writer
18-
logger *log.Logger
18+
writer io.Writer
19+
logger *log.Logger
1920
}
2021
)
2122

2223
func NewResponse(w http.ResponseWriter, l *log.Logger) *Response {
2324
return &Response{
2425
ResponseWriter: w,
2526
header: &Header{w.Header()},
26-
// writer: w,
27-
logger: l,
27+
writer: w,
28+
logger: l,
2829
}
2930
}
3031

@@ -43,7 +44,7 @@ func (r *Response) WriteHeader(code int) {
4344
}
4445

4546
func (r *Response) Write(b []byte) (n int, err error) {
46-
n, err = r.ResponseWriter.Write(b)
47+
n, err = r.writer.Write(b)
4748
r.size += int64(n)
4849
return
4950
}
@@ -60,19 +61,19 @@ func (r *Response) Committed() bool {
6061
return r.committed
6162
}
6263

63-
// func (r *Response) SetWriter(w io.Writer) {
64-
// r.writer = w
65-
// }
64+
func (r *Response) SetWriter(w io.Writer) {
65+
r.writer = w
66+
}
6667

67-
// func (r *Response) Writer() io.Writer {
68-
// return r.writer
69-
// }
68+
func (r *Response) Writer() io.Writer {
69+
return r.writer
70+
}
7071

7172
func (r *Response) reset(w http.ResponseWriter, h engine.Header) {
7273
r.ResponseWriter = w
7374
r.header = h
7475
r.status = http.StatusOK
7576
r.size = 0
7677
r.committed = false
77-
// r.writer = w
78+
r.writer = w
7879
}

engine/standard/server.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
type (
1313
Server struct {
14-
server *http.Server
14+
*http.Server
1515
config *engine.Config
1616
handler engine.Handler
1717
logger *log.Logger
@@ -42,7 +42,7 @@ func NewFromTLS(addr, certfile, keyfile string) *Server {
4242

4343
func NewFromConfig(c *engine.Config) (s *Server) {
4444
s = &Server{
45-
server: new(http.Server),
45+
Server: new(http.Server),
4646
config: c,
4747
pool: &Pool{
4848
request: sync.Pool{
@@ -71,8 +71,8 @@ func NewFromConfig(c *engine.Config) (s *Server) {
7171
}),
7272
logger: log.New("echo"),
7373
}
74-
s.server.Addr = c.Address
75-
s.server.Handler = s
74+
s.Addr = c.Address
75+
s.Handler = s
7676
return
7777
}
7878

@@ -88,9 +88,9 @@ func (s *Server) Start() {
8888
certfile := s.config.TLSCertfile
8989
keyfile := s.config.TLSKeyfile
9090
if certfile != "" && keyfile != "" {
91-
s.logger.Fatal(s.server.ListenAndServeTLS(certfile, keyfile))
91+
s.logger.Fatal(s.ListenAndServeTLS(certfile, keyfile))
9292
} else {
93-
s.logger.Fatal(s.server.ListenAndServe())
93+
s.logger.Fatal(s.ListenAndServe())
9494
}
9595
}
9696

@@ -118,10 +118,6 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
118118
s.pool.header.Put(resHdr)
119119
}
120120

121-
func (s *Server) Server() *http.Server {
122-
return s.server
123-
}
124-
125121
// WrapHandler wraps `http.Handler` into `echo.HandlerFunc`.
126122
func WrapHandler(h http.Handler) echo.HandlerFunc {
127123
return func(c echo.Context) error {

middleware/compress.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ func Gzip(options ...*GzipOptions) echo.MiddlewareFunc {
3232
c.Response().Header().Add(echo.Vary, echo.AcceptEncoding)
3333
if strings.Contains(c.Request().Header().Get(echo.AcceptEncoding), scheme) {
3434
w := pool.Get().(*gzip.Writer)
35-
w.Reset(c.Response())
35+
w.Reset(c.Response().Writer())
3636
defer func() {
3737
w.Close()
3838
pool.Put(w)
3939
}()
40-
gw := gzipResponseWriter{Response: c.Response(), Writer: w}
40+
g := gzipResponseWriter{Response: c.Response(), Writer: w}
4141
c.Response().Header().Set(echo.ContentEncoding, scheme)
42-
c.SetResponse(gw)
42+
c.Response().SetWriter(g)
4343
}
4444
if err := next.Handle(c); err != nil {
4545
c.Error(err)

middleware/recover.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package middleware
22

33
import (
4-
"fmt"
5-
6-
"runtime"
4+
"errors"
75

86
"github.com/labstack/echo"
97
)
@@ -17,14 +15,22 @@ type (
1715
// and handles the control to the centralized HTTPErrorHandler.
1816
func Recover(options ...*RecoverOptions) echo.MiddlewareFunc {
1917
return func(next echo.Handler) echo.Handler {
20-
// TODO: Provide better stack trace `https://github.com/go-errors/errors` `https://github.com/docker/libcontainer/tree/master/stacktrace`
18+
// TODO: Provide better stack trace
19+
// - `https://github.com/go-errors/errors`
20+
// - `https://github.com/docker/libcontainer/tree/master/stacktrace`
2121
return echo.HandlerFunc(func(c echo.Context) error {
2222
defer func() {
23-
if err := recover(); err != nil {
24-
trace := make([]byte, 1<<16)
25-
n := runtime.Stack(trace, true)
26-
c.Error(fmt.Errorf("panic recover\n %v\n stack trace %d bytes\n %s",
27-
err, n, trace[:n]))
23+
if r := recover(); r != nil {
24+
e := ""
25+
switch r := r.(type) {
26+
case string:
27+
e = r
28+
case error:
29+
e = r.Error()
30+
default:
31+
e = "unknown error"
32+
}
33+
c.Error(errors.New("panic recover|" + e))
2834
}
2935
}()
3036
return next.Handle(c)

website/content/guide/customization.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ SetLogOutput sets the output destination for the logger. Default value is `os.St
4141

4242
`echo#SetLogLevel(l log.Level)`
4343

44-
SetLogLevel sets the log level for the logger. Default value is `log.FATAL`.
44+
SetLogLevel sets the log level for the logger. Default value is `log.ERROR`.
4545

4646
### Auto index
4747

0 commit comments

Comments
 (0)