Skip to content

Commit 9650c39

Browse files
committed
Bumped to v1.3
Signed-off-by: Vishal Rana <vr@labstack.com>
1 parent f54cdd8 commit 9650c39

File tree

13 files changed

+86
-68
lines changed

13 files changed

+86
-68
lines changed

context.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func (c *Context) HTML(code int, html string) (err error) {
142142

143143
// String sends a string response with status code.
144144
func (c *Context) String(code int, s string) (err error) {
145-
c.response.Header().Set(ContentType, TextPlain)
145+
c.response.Header().Set(ContentType, TextPlainCharsetUTF8)
146146
c.response.WriteHeader(code)
147147
c.response.Write([]byte(s))
148148
return
@@ -255,6 +255,11 @@ func (c *Context) Error(err error) {
255255
c.echo.httpErrorHandler(err, c)
256256
}
257257

258+
// Echo returns the `Echo` instance.
259+
func (c *Context) Echo() *Echo {
260+
return c.echo
261+
}
262+
258263
func (c *Context) reset(r *http.Request, w http.ResponseWriter, e *Echo) {
259264
c.request = r
260265
c.response.reset(w)

context_test.go

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ func TestContext(t *testing.T) {
3737

3838
var nonMarshallableChannel chan bool
3939

40+
e := New()
4041
req, _ := http.NewRequest(POST, "/", strings.NewReader(userJSON))
4142
rec := httptest.NewRecorder()
42-
c := NewContext(req, NewResponse(rec), New())
43+
c := NewContext(req, NewResponse(rec, e), e)
4344

4445
// Request
4546
assert.NotNil(t, c.Request())
@@ -96,7 +97,7 @@ func TestContext(t *testing.T) {
9697

9798
// JSON
9899
rec = httptest.NewRecorder()
99-
c = NewContext(req, NewResponse(rec), New())
100+
c = NewContext(req, NewResponse(rec, e), e)
100101
err = c.JSON(http.StatusOK, user{"1", "Joe"})
101102
if assert.NoError(t, err) {
102103
assert.Equal(t, http.StatusOK, rec.Code)
@@ -106,14 +107,14 @@ func TestContext(t *testing.T) {
106107

107108
// JSON (error)
108109
rec = httptest.NewRecorder()
109-
c = NewContext(req, NewResponse(rec), New())
110+
c = NewContext(req, NewResponse(rec, e), e)
110111
val := make(chan bool)
111112
err = c.JSON(http.StatusOK, val)
112113
assert.Error(t, err)
113114

114115
// JSONIndent
115116
rec = httptest.NewRecorder()
116-
c = NewContext(req, NewResponse(rec), New())
117+
c = NewContext(req, NewResponse(rec, e), e)
117118
err = c.JSONIndent(http.StatusOK, user{"1", "Joe"}, "_", "?")
118119
if assert.NoError(t, err) {
119120
assert.Equal(t, http.StatusOK, rec.Code)
@@ -123,13 +124,13 @@ func TestContext(t *testing.T) {
123124

124125
// JSONIndent (error)
125126
rec = httptest.NewRecorder()
126-
c = NewContext(req, NewResponse(rec), New())
127+
c = NewContext(req, NewResponse(rec, e), e)
127128
err = c.JSONIndent(http.StatusOK, nonMarshallableChannel, "_", "?")
128129
assert.Error(t, err)
129130

130131
// JSONP
131132
rec = httptest.NewRecorder()
132-
c = NewContext(req, NewResponse(rec), New())
133+
c = NewContext(req, NewResponse(rec, e), e)
133134
callback := "callback"
134135
err = c.JSONP(http.StatusOK, callback, user{"1", "Joe"})
135136
if assert.NoError(t, err) {
@@ -140,7 +141,7 @@ func TestContext(t *testing.T) {
140141

141142
// XML
142143
rec = httptest.NewRecorder()
143-
c = NewContext(req, NewResponse(rec), New())
144+
c = NewContext(req, NewResponse(rec, e), e)
144145
err = c.XML(http.StatusOK, user{"1", "Joe"})
145146
if assert.NoError(t, err) {
146147
assert.Equal(t, http.StatusOK, rec.Code)
@@ -150,13 +151,13 @@ func TestContext(t *testing.T) {
150151

151152
// XML (error)
152153
rec = httptest.NewRecorder()
153-
c = NewContext(req, NewResponse(rec), New())
154+
c = NewContext(req, NewResponse(rec, e), e)
154155
err = c.XML(http.StatusOK, nonMarshallableChannel)
155156
assert.Error(t, err)
156157

157158
// XMLIndent
158159
rec = httptest.NewRecorder()
159-
c = NewContext(req, NewResponse(rec), New())
160+
c = NewContext(req, NewResponse(rec, e), e)
160161
err = c.XMLIndent(http.StatusOK, user{"1", "Joe"}, "_", "?")
161162
if assert.NoError(t, err) {
162163
assert.Equal(t, http.StatusOK, rec.Code)
@@ -166,23 +167,23 @@ func TestContext(t *testing.T) {
166167

167168
// XMLIndent (error)
168169
rec = httptest.NewRecorder()
169-
c = NewContext(req, NewResponse(rec), New())
170+
c = NewContext(req, NewResponse(rec, e), e)
170171
err = c.XMLIndent(http.StatusOK, nonMarshallableChannel, "_", "?")
171172
assert.Error(t, err)
172173

173174
// String
174175
rec = httptest.NewRecorder()
175-
c = NewContext(req, NewResponse(rec), New())
176+
c = NewContext(req, NewResponse(rec, e), e)
176177
err = c.String(http.StatusOK, "Hello, World!")
177178
if assert.NoError(t, err) {
178179
assert.Equal(t, http.StatusOK, rec.Code)
179-
assert.Equal(t, TextPlain, rec.Header().Get(ContentType))
180+
assert.Equal(t, TextPlainCharsetUTF8, rec.Header().Get(ContentType))
180181
assert.Equal(t, "Hello, World!", rec.Body.String())
181182
}
182183

183184
// HTML
184185
rec = httptest.NewRecorder()
185-
c = NewContext(req, NewResponse(rec), New())
186+
c = NewContext(req, NewResponse(rec, e), e)
186187
err = c.HTML(http.StatusOK, "Hello, <strong>World!</strong>")
187188
if assert.NoError(t, err) {
188189
assert.Equal(t, http.StatusOK, rec.Code)
@@ -192,7 +193,7 @@ func TestContext(t *testing.T) {
192193

193194
// File
194195
rec = httptest.NewRecorder()
195-
c = NewContext(req, NewResponse(rec), New())
196+
c = NewContext(req, NewResponse(rec, e), e)
196197
err = c.File("test/fixture/walle.png", "", false)
197198
if assert.NoError(t, err) {
198199
assert.Equal(t, http.StatusOK, rec.Code)
@@ -201,7 +202,7 @@ func TestContext(t *testing.T) {
201202

202203
// File as attachment
203204
rec = httptest.NewRecorder()
204-
c = NewContext(req, NewResponse(rec), New())
205+
c = NewContext(req, NewResponse(rec, e), e)
205206
err = c.File("test/fixture/walle.png", "WALLE.PNG", true)
206207
if assert.NoError(t, err) {
207208
assert.Equal(t, http.StatusOK, rec.Code)
@@ -211,23 +212,23 @@ func TestContext(t *testing.T) {
211212

212213
// NoContent
213214
rec = httptest.NewRecorder()
214-
c = NewContext(req, NewResponse(rec), New())
215+
c = NewContext(req, NewResponse(rec, e), e)
215216
c.NoContent(http.StatusOK)
216217
assert.Equal(t, http.StatusOK, c.response.status)
217218

218219
// Redirect
219220
rec = httptest.NewRecorder()
220-
c = NewContext(req, NewResponse(rec), New())
221+
c = NewContext(req, NewResponse(rec, e), e)
221222
assert.Equal(t, nil, c.Redirect(http.StatusMovedPermanently, "http://labstack.github.io/echo"))
222223

223224
// Error
224225
rec = httptest.NewRecorder()
225-
c = NewContext(req, NewResponse(rec), New())
226+
c = NewContext(req, NewResponse(rec, e), e)
226227
c.Error(errors.New("error"))
227228
assert.Equal(t, http.StatusInternalServerError, c.response.status)
228229

229230
// reset
230-
c.reset(req, NewResponse(httptest.NewRecorder()), New())
231+
c.reset(req, NewResponse(httptest.NewRecorder(), e), e)
231232
}
232233

233234
func TestContextPath(t *testing.T) {

echo.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type (
3636
debug bool
3737
hook http.HandlerFunc
3838
autoIndex bool
39+
logger *log.Logger
3940
router *Router
4041
}
4142

@@ -181,8 +182,6 @@ var (
181182
}
182183

183184
unixEpochTime = time.Unix(0, 0)
184-
185-
logger = log.New("echo")
186185
)
187186

188187
// New creates an instance of Echo.
@@ -211,14 +210,14 @@ func New() (e *Echo) {
211210
if !c.response.committed {
212211
http.Error(c.response, msg, code)
213212
}
214-
log.Error(err)
213+
e.logger.Error(err)
215214
}
216215
e.SetHTTPErrorHandler(e.defaultHTTPErrorHandler)
217216
e.SetBinder(&binder{})
218217

219218
// Logger
220-
log.SetPrefix("echo")
221-
log.SetLevel(log.INFO)
219+
e.logger = log.New("echo")
220+
e.logger.SetLevel(log.INFO)
222221

223222
return
224223
}
@@ -228,14 +227,24 @@ func (e *Echo) Router() *Router {
228227
return e.router
229228
}
230229

231-
// SetOutput sets the output destination for the logger.
232-
func SetOutput(w io.Writer) {
233-
log.SetOutput(w)
230+
// SetLogPrefix sets the prefix for the logger. Default value is `echo`.
231+
func (e *Echo) SetLogPrefix(prefix string) {
232+
e.logger.SetPrefix(prefix)
233+
}
234+
235+
// SetLogOutput sets the output destination for the logger. Default value is `os.Std*`
236+
func (e *Echo) SetLogOutput(w io.Writer) {
237+
e.logger.SetOutput(w)
238+
}
239+
240+
// SetLogLevel sets the log level for the logger. Default value is `log.INFO`.
241+
func (e *Echo) SetLogLevel(l log.Level) {
242+
e.logger.SetLevel(l)
234243
}
235244

236-
// SetLogLevel sets the log level for global logger. The default value is `log.INFO`.
237-
func SetLogLevel(l log.Level) {
238-
log.SetLevel(l)
245+
// Logger returns the logger instance.
246+
func (e *Echo) Logger() *log.Logger {
247+
return e.logger
239248
}
240249

241250
// HTTP2 enables/disables HTTP2 support.
@@ -273,8 +282,7 @@ func (e *Echo) Debug() bool {
273282
return e.debug
274283
}
275284

276-
// AutoIndex enables/disables automatically creates a directory listing if the directory
277-
// doesn't contain an index page.
285+
// AutoIndex enables/disables automatically creating an index page for the directory.
278286
func (e *Echo) AutoIndex(on bool) {
279287
e.autoIndex = on
280288
}
@@ -575,11 +583,11 @@ func (e *Echo) run(s *http.Server, files ...string) {
575583
http2.ConfigureServer(s, nil)
576584
}
577585
if len(files) == 0 {
578-
log.Fatal(s.ListenAndServe())
586+
e.logger.Fatal(s.ListenAndServe())
579587
} else if len(files) == 2 {
580-
log.Fatal(s.ListenAndServeTLS(files[0], files[1]))
588+
e.logger.Fatal(s.ListenAndServeTLS(files[0], files[1]))
581589
} else {
582-
log.Fatal("invalid TLS configuration")
590+
e.logger.Fatal("invalid TLS configuration")
583591
}
584592
}
585593

echo_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestEcho(t *testing.T) {
2727
e := New()
2828
req, _ := http.NewRequest(GET, "/", nil)
2929
rec := httptest.NewRecorder()
30-
c := NewContext(req, NewResponse(rec), e)
30+
c := NewContext(req, NewResponse(rec, e), e)
3131

3232
// Router
3333
assert.NotNil(t, e.Router())

middleware/auth_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import (
1111
)
1212

1313
func TestBasicAuth(t *testing.T) {
14+
e := echo.New()
1415
req, _ := http.NewRequest(echo.GET, "/", nil)
1516
rec := httptest.NewRecorder()
16-
c := echo.NewContext(req, echo.NewResponse(rec), echo.New())
17+
c := echo.NewContext(req, echo.NewResponse(rec, e), e)
1718
fn := func(u, p string) bool {
1819
if u == "joe" && p == "secret" {
1920
return true

middleware/compress_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ func (c *closeNotifyingRecorder) CloseNotify() <-chan bool {
3333
}
3434

3535
func TestGzip(t *testing.T) {
36+
e := echo.New()
3637
req, _ := http.NewRequest(echo.GET, "/", nil)
3738
rec := httptest.NewRecorder()
38-
c := echo.NewContext(req, echo.NewResponse(rec), echo.New())
39+
c := echo.NewContext(req, echo.NewResponse(rec, e), e)
3940
h := func(c *echo.Context) error {
4041
c.Response().Write([]byte("test")) // For Content-Type sniffing
4142
return nil
@@ -49,7 +50,7 @@ func TestGzip(t *testing.T) {
4950
req, _ = http.NewRequest(echo.GET, "/", nil)
5051
req.Header.Set(echo.AcceptEncoding, "gzip")
5152
rec = httptest.NewRecorder()
52-
c = echo.NewContext(req, echo.NewResponse(rec), echo.New())
53+
c = echo.NewContext(req, echo.NewResponse(rec, e), e)
5354

5455
// Gzip
5556
Gzip()(h)(c)
@@ -121,7 +122,6 @@ func TestGzipCloseNotify(t *testing.T) {
121122
}
122123

123124
func BenchmarkGzip(b *testing.B) {
124-
125125
b.StopTimer()
126126
b.ReportAllocs()
127127

@@ -135,8 +135,9 @@ func BenchmarkGzip(b *testing.B) {
135135
b.StartTimer()
136136

137137
for i := 0; i < b.N; i++ {
138+
e := echo.New()
138139
rec := httptest.NewRecorder()
139-
c := echo.NewContext(req, echo.NewResponse(rec), echo.New())
140+
c := echo.NewContext(req, echo.NewResponse(rec, e), e)
140141
Gzip()(h)(c)
141142
}
142143

middleware/logger.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import (
66

77
"github.com/labstack/echo"
88
"github.com/labstack/gommon/color"
9-
"github.com/labstack/gommon/log"
109
)
1110

1211
func Logger() echo.MiddlewareFunc {
1312
return func(h echo.HandlerFunc) echo.HandlerFunc {
1413
return func(c *echo.Context) error {
1514
req := c.Request()
1615
res := c.Response()
16+
logger := c.Echo().Logger()
1717

1818
remoteAddr := req.RemoteAddr
1919
if ip := req.Header.Get(echo.XRealIP); ip != "" {
@@ -47,7 +47,7 @@ func Logger() echo.MiddlewareFunc {
4747
code = color.Cyan(n)
4848
}
4949

50-
log.Info("%s %s %s %s %s %d", remoteAddr, method, path, code, stop.Sub(start), size)
50+
logger.Info("%s %s %s %s %s %d", remoteAddr, method, path, code, stop.Sub(start), size)
5151
return nil
5252
}
5353
}

0 commit comments

Comments
 (0)