Skip to content

Commit 9db1861

Browse files
committed
feat(serverHandler): include response status code to access log
1 parent a5e45bd commit 9db1861

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/serverHandler/log.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,35 @@ import (
55
"mjpclab.dev/ghfs/src/util"
66
"net/http"
77
"net/url"
8+
"strconv"
89
)
910

10-
func logRequest(logger *serverLog.Logger, r *http.Request) {
11+
type loggableResponseWriter struct {
12+
http.ResponseWriter
13+
request *http.Request
14+
logger *serverLog.Logger
15+
}
16+
17+
func (w loggableResponseWriter) WriteHeader(statusCode int) {
18+
w.ResponseWriter.WriteHeader(statusCode)
19+
logRequest(w.logger, w.request, statusCode)
20+
}
21+
22+
func tryGetLoggableResponseWriter(w http.ResponseWriter, r *http.Request, logger *serverLog.Logger) http.ResponseWriter {
23+
if logger.CanLogAccess() {
24+
return loggableResponseWriter{w, r, logger}
25+
} else {
26+
return w
27+
}
28+
}
29+
30+
func logRequest(logger *serverLog.Logger, r *http.Request, statusCode int) {
1131
if !logger.CanLogAccess() {
1232
return
1333
}
1434

35+
code := strconv.Itoa(statusCode)
36+
1537
var unescapedUri []byte
1638
unescapedLen := 0
1739
unescapedStr, err := url.PathUnescape(r.RequestURI)
@@ -24,10 +46,12 @@ func logRequest(logger *serverLog.Logger, r *http.Request) {
2446

2547
uri := util.EscapeControllingRune(r.RequestURI)
2648

27-
buf := serverLog.NewBuffer(2 + len(r.RemoteAddr) + len(r.Method) + unescapedLen + len(uri))
49+
buf := serverLog.NewBuffer(3 + len(r.RemoteAddr) + len(code) + len(r.Method) + unescapedLen + len(uri))
2850

2951
buf = append(buf, []byte(r.RemoteAddr)...) // ~ 9-47 bytes, mainly 21 bytes
3052
buf = append(buf, ' ') // 1 byte
53+
buf = append(buf, []byte(code)...) // 3 bytes
54+
buf = append(buf, ' ') // 1 byte
3155
buf = append(buf, []byte(r.Method)...) // ~ 3-4 bytes
3256
buf = append(buf, ' ') // 1 byte
3357
if unescapedLen > 0 {

src/serverHandler/preprocessHandler.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ type preprocessHandler struct {
1414
}
1515

1616
func (pph preprocessHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
17-
logRequest(pph.logger, r)
18-
17+
w = tryGetLoggableResponseWriter(w, r, pph.logger)
1918
rw := serverCompress.NewResponseWriter(w, r)
2019

2120
if len(pph.preMiddlewares) > 0 {

0 commit comments

Comments
 (0)