Skip to content

Commit 67e789b

Browse files
committed
New Handler option to fully disable the access log.
People defining their own custom logger using an OuterMiddleware will be able to totally skip the log.go middleware, avoiding any perf penalty. (the previous solution was to use log.New(ioutil.Discard, "", 0))
1 parent 89aa984 commit 67e789b

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

rest/error.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"log"
77
"net/http"
8+
"os"
89
"runtime/debug"
910
)
1011

@@ -17,6 +18,11 @@ type errorMiddleware struct {
1718

1819
func (mw *errorMiddleware) MiddlewareFunc(h HandlerFunc) HandlerFunc {
1920

21+
// set the default Logger
22+
if mw.Logger == nil {
23+
mw.Logger = log.New(os.Stderr, "", 0)
24+
}
25+
2026
return func(w ResponseWriter, r *Request) {
2127

2228
// catch user code's panic, and convert to http response

rest/handler.go

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"log"
55
"mime"
66
"net/http"
7-
"os"
87
"strings"
98
)
109

@@ -62,6 +61,10 @@ type ResourceHandler struct {
6261
// optional, defaults to log.New(os.Stderr, "", 0)
6362
Logger *log.Logger
6463

64+
// If true, the access log will be fully disabled.
65+
// (the log middleware is not even instantiated, avoiding any performance penalty)
66+
DisableLogger bool
67+
6568
// Custom logger used for logging the panic errors,
6669
// optional, defaults to log.New(os.Stderr, "", 0)
6770
ErrorLogger *log.Logger
@@ -77,14 +80,6 @@ type ResourceHandler struct {
7780
// if a request matches multiple Routes, the first one will be used.
7881
func (rh *ResourceHandler) SetRoutes(routes ...*Route) error {
7982

80-
// set the default Loggers
81-
if rh.Logger == nil {
82-
rh.Logger = log.New(os.Stderr, "", 0)
83-
}
84-
if rh.ErrorLogger == nil {
85-
rh.ErrorLogger = log.New(os.Stderr, "", 0)
86-
}
87-
8883
// start the router
8984
rh.internalRouter = &router{
9085
routes: routes,
@@ -116,13 +111,15 @@ func (rh *ResourceHandler) instantiateMiddlewares() {
116111
rh.OuterMiddlewares...,
117112
)
118113

119-
// log as the first, depend on timer and recorder.
120-
middlewares = append(middlewares,
121-
&logMiddleware{
122-
rh.Logger,
123-
rh.EnableLogAsJson,
124-
},
125-
)
114+
// log as the first, depends on timer and recorder.
115+
if !rh.DisableLogger {
116+
middlewares = append(middlewares,
117+
&logMiddleware{
118+
rh.Logger,
119+
rh.EnableLogAsJson,
120+
},
121+
)
122+
}
126123

127124
if rh.EnableGzip {
128125
middlewares = append(middlewares, &gzipMiddleware{})

rest/log.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package rest
33
import (
44
"encoding/json"
55
"log"
6+
"os"
67
"time"
78
)
89

@@ -15,6 +16,11 @@ type logMiddleware struct {
1516

1617
func (mw *logMiddleware) MiddlewareFunc(h HandlerFunc) HandlerFunc {
1718

19+
// set the default Logger
20+
if mw.Logger == nil {
21+
mw.Logger = log.New(os.Stderr, "", 0)
22+
}
23+
1824
return func(w ResponseWriter, r *Request) {
1925

2026
// call the handler

0 commit comments

Comments
 (0)