mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-23 22:27:38 -05:00
Merge pull request #135 from simonjefford/ensure_correct_log_status
log: ensure the correct status is always logged
This commit is contained in:
commit
92391bfdf9
2 changed files with 54 additions and 0 deletions
|
@ -2,6 +2,7 @@
|
||||||
package log
|
package log
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
@ -19,6 +20,11 @@ func (l Logger) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
if middleware.Path(r.URL.Path).Matches(rule.PathScope) {
|
if middleware.Path(r.URL.Path).Matches(rule.PathScope) {
|
||||||
responseRecorder := middleware.NewResponseRecorder(w)
|
responseRecorder := middleware.NewResponseRecorder(w)
|
||||||
status, err := l.Next.ServeHTTP(responseRecorder, r)
|
status, err := l.Next.ServeHTTP(responseRecorder, r)
|
||||||
|
if status >= 400 {
|
||||||
|
responseRecorder.WriteHeader(status)
|
||||||
|
fmt.Fprintf(responseRecorder, "%d %s", status, http.StatusText(status))
|
||||||
|
status = 0
|
||||||
|
}
|
||||||
rep := middleware.NewReplacer(r, responseRecorder)
|
rep := middleware.NewReplacer(r, responseRecorder)
|
||||||
rule.Log.Println(rep.Replace(rule.Format))
|
rule.Log.Println(rep.Replace(rule.Format))
|
||||||
return status, err
|
return status, err
|
||||||
|
|
48
middleware/log/log_test.go
Normal file
48
middleware/log/log_test.go
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type erroringMiddleware struct{}
|
||||||
|
|
||||||
|
func (erroringMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
|
return http.StatusNotFound, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoggedStatus(t *testing.T) {
|
||||||
|
var f bytes.Buffer
|
||||||
|
var next erroringMiddleware
|
||||||
|
rule := Rule{
|
||||||
|
PathScope: "/",
|
||||||
|
Format: DefaultLogFormat,
|
||||||
|
Log: log.New(&f, "", 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
logger := Logger{
|
||||||
|
Rules: []Rule{rule},
|
||||||
|
Next: next,
|
||||||
|
}
|
||||||
|
|
||||||
|
r, err := http.NewRequest("GET", "/", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
|
||||||
|
status, err := logger.ServeHTTP(rec, r)
|
||||||
|
if status != 0 {
|
||||||
|
t.Error("Expected status to be 0 - was", status)
|
||||||
|
}
|
||||||
|
|
||||||
|
logged := f.String()
|
||||||
|
if !strings.Contains(logged, "404 13") {
|
||||||
|
t.Error("Expected 404 to be logged. Logged string -", logged)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue