Skip to content

Commit 9fb4e03

Browse files
committed
Add per-handle option to not log events
1 parent 2833a2a commit 9fb4e03

File tree

6 files changed

+103
-31
lines changed

6 files changed

+103
-31
lines changed

api.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,15 @@ func (a API) apiPreHandle(endpointHandle APIHandle, options HandleOptions) route
9696

9797
options.UnauthorizedMethod(w, request.HTTP)
9898
} else {
99-
a.apiPostHandle(endpointHandle, userData)(w, request)
99+
a.apiPostHandle(endpointHandle, userData, options)(w, request)
100100
}
101101
return
102102
}
103-
a.apiPostHandle(endpointHandle, nil)(w, request)
103+
a.apiPostHandle(endpointHandle, nil, options)(w, request)
104104
}
105105
}
106106

107-
func (a API) apiPostHandle(endpointHandle APIHandle, userData interface{}) router.Handle {
107+
func (a API) apiPostHandle(endpointHandle APIHandle, userData interface{}, options HandleOptions) router.Handle {
108108
return func(w http.ResponseWriter, r router.Request) {
109109
w.Header().Set("Content-Type", "application/json")
110110

@@ -143,13 +143,15 @@ func (a API) apiPostHandle(endpointHandle APIHandle, userData interface{}) route
143143
response.Code = 200
144144
response.Data = data
145145
}
146-
log.PWrite(a.server.Options.RequestLogLevel, "API Request", map[string]interface{}{
147-
"remote_addr": getRealIP(r.HTTP),
148-
"method": r.HTTP.Method,
149-
"url": r.HTTP.URL,
150-
"elapsed": elapsed.String(),
151-
"status": response.Code,
152-
})
146+
if !options.DontLogRequests {
147+
log.PWrite(a.server.Options.RequestLogLevel, "API Request", map[string]interface{}{
148+
"remote_addr": getRealIP(r.HTTP),
149+
"method": r.HTTP.Method,
150+
"url": r.HTTP.URL,
151+
"elapsed": elapsed.String(),
152+
"status": response.Code,
153+
})
154+
}
153155
if err := json.NewEncoder(w).Encode(response); err != nil {
154156
log.PError("Error writing response", map[string]interface{}{
155157
"method": r.HTTP.Method,

api_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,3 +536,65 @@ func TestAPILogLevel(t *testing.T) {
536536
}
537537
}
538538
}
539+
540+
func TestAPIHandleNoLog(t *testing.T) {
541+
logtic.Log.Reset()
542+
logFilePath := path.Join(t.TempDir(), "web.log")
543+
logtic.Log.FilePath = logFilePath
544+
545+
stdout := &bytes.Buffer{}
546+
logtic.Log.Stdout = stdout
547+
logtic.Log.Stderr = stdout
548+
549+
logtic.Log.Level = logtic.LevelDebug
550+
logtic.Log.Open()
551+
defer logtic.Log.Close()
552+
553+
server := newServer()
554+
555+
handle := func(request web.Request) (interface{}, *web.APIResponse, *web.Error) {
556+
return true, nil, nil
557+
}
558+
559+
path1 := randomString(5)
560+
path2 := randomString(5)
561+
562+
server.API.GET("/"+path1, handle, web.HandleOptions{})
563+
server.API.GET("/"+path2, handle, web.HandleOptions{DontLogRequests: true})
564+
565+
http.Get(fmt.Sprintf("http://localhost:%d/%s", server.ListenPort, path1))
566+
http.Get(fmt.Sprintf("http://localhost:%d/%s", server.ListenPort, path2))
567+
568+
logtic.Log.Close()
569+
path1Pattern := regexp.MustCompile(`[0-9\-:TZ]+ \[DEBUG\]\[HTTP\] API Request: elapsed='[^']+' method='GET' remote_addr='[^']+' status=200 url='/` + path1 + `'`)
570+
path2Pattern := regexp.MustCompile(`[0-9\-:TZ]+ \[DEBUG\]\[HTTP\] API Request: elapsed='[^']+' method='GET' remote_addr='[^']+' status=200 url='/` + path2 + `'`)
571+
f, err := os.OpenFile(logFilePath, os.O_RDONLY, 0644)
572+
if err != nil {
573+
panic(err)
574+
}
575+
defer f.Close()
576+
577+
logFileData, err := io.ReadAll(f)
578+
if err != nil {
579+
panic(err)
580+
}
581+
582+
if !path1Pattern.Match(logFileData) {
583+
t.Errorf("Did not find expected log line for API request\n----\n%s\n----", logFileData)
584+
}
585+
if path2Pattern.Match(logFileData) {
586+
t.Errorf("Did not find expected log line for API request\n----\n%s\n----", logFileData)
587+
}
588+
589+
if stdout.Len() == 0 {
590+
t.Errorf("Did not find expected log line in stdout for API request")
591+
}
592+
593+
logtic.Log.Reset()
594+
for _, arg := range os.Args {
595+
if arg == "-test.v=true" {
596+
logtic.Log.Level = logtic.LevelDebug
597+
logtic.Log.Open()
598+
}
599+
}
600+
}

handle.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ type HandleOptions struct {
3232
// exceed this limit will receive a 413 Payload Too Large response.
3333
// The default value of 0 will not reject requests with large bodies.
3434
MaxBodyLength uint64
35+
// DontLogRequests if true then requests to this handle are not logged
36+
DontLogRequests bool
3537
}
3638

3739
func isUserdataNil(userData interface{}) bool {

http.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,13 @@ func (h HTTP) httpPreHandle(endpointHandle HTTPHandle, options HandleOptions) ro
104104
UserData: userData,
105105
})
106106
elapsed := time.Since(start)
107-
log.PWrite(h.server.Options.RequestLogLevel, "HTTP Request", map[string]interface{}{
108-
"remote_addr": getRealIP(request.HTTP),
109-
"method": request.HTTP.Method,
110-
"url": request.HTTP.URL,
111-
"elapsed": elapsed.String(),
112-
})
107+
if !options.DontLogRequests {
108+
log.PWrite(h.server.Options.RequestLogLevel, "HTTP Request", map[string]interface{}{
109+
"remote_addr": getRealIP(request.HTTP),
110+
"method": request.HTTP.Method,
111+
"url": request.HTTP.URL,
112+
"elapsed": elapsed.String(),
113+
})
114+
}
113115
}
114116
}

http_easy.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,15 @@ func (h HTTPEasy) httpPreHandle(endpointHandle HTTPEasyHandle, options HandleOpt
132132

133133
options.UnauthorizedMethod(w, request.HTTP)
134134
} else {
135-
h.httpPostHandle(endpointHandle, userData)(w, request)
135+
h.httpPostHandle(endpointHandle, userData, options)(w, request)
136136
}
137137
return
138138
}
139-
h.httpPostHandle(endpointHandle, nil)(w, request)
139+
h.httpPostHandle(endpointHandle, nil, options)(w, request)
140140
}
141141
}
142142

143-
func (h HTTPEasy) httpPostHandle(endpointHandle HTTPEasyHandle, userData interface{}) router.Handle {
143+
func (h HTTPEasy) httpPostHandle(endpointHandle HTTPEasyHandle, userData interface{}, options HandleOptions) router.Handle {
144144
return func(w http.ResponseWriter, r router.Request) {
145145
request := Request{
146146
HTTP: r.HTTP,
@@ -206,13 +206,15 @@ func (h HTTPEasy) httpPostHandle(endpointHandle HTTPEasyHandle, userData interfa
206206
if response.Status != 0 {
207207
code = response.Status
208208
}
209-
log.PWrite(h.server.Options.RequestLogLevel, "HTTP Request", map[string]interface{}{
210-
"remote_addr": getRealIP(r.HTTP),
211-
"method": r.HTTP.Method,
212-
"url": r.HTTP.URL,
213-
"elapsed": elapsed.String(),
214-
"status": code,
215-
})
209+
if !options.DontLogRequests {
210+
log.PWrite(h.server.Options.RequestLogLevel, "HTTP Request", map[string]interface{}{
211+
"remote_addr": getRealIP(r.HTTP),
212+
"method": r.HTTP.Method,
213+
"url": r.HTTP.URL,
214+
"elapsed": elapsed.String(),
215+
"status": code,
216+
})
217+
}
216218
w.WriteHeader(code)
217219

218220
if r.HTTP.Method != "HEAD" && response.Reader != nil {

websocket.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,12 @@ func (s *Server) socketHandler(endpointHandle SocketHandle, options HandleOption
8686
}, &WSConn{
8787
conn,
8888
})
89-
log.PWrite(s.Options.RequestLogLevel, "Websocket request", map[string]interface{}{
90-
"method": r.HTTP.Method,
91-
"url": r.HTTP.RequestURI,
92-
"remote_addr": getRealIP(r.HTTP),
93-
})
89+
if !options.DontLogRequests {
90+
log.PWrite(s.Options.RequestLogLevel, "Websocket request", map[string]interface{}{
91+
"method": r.HTTP.Method,
92+
"url": r.HTTP.RequestURI,
93+
"remote_addr": getRealIP(r.HTTP),
94+
})
95+
}
9496
}
9597
}

0 commit comments

Comments
 (0)