@marcel91200 / caddy Mirror · read-only / commits / f55b123d
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 01:30 UTC

caddyhttp: Split up logged remote address into IP and port (#4403)

Francis Lavoie committed Nov 29, 2021 at 01:18 UTC f55b123d63132e290789bcd07077375c76b6e1dd
5 files changed +22 -8
admin.go
+7 -1
@@ -659,11 +659,17 @@ type adminHandler struct {
659 // ServeHTTP is the external entry point for API requests.
660 // It will only be called once per request.
661 func (h adminHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
662 + ip, port, err := net.SplitHostPort(r.RemoteAddr)
663 + if err != nil {
664 + ip = r.RemoteAddr
665 + port = ""
666 + }
667 log := Log().Named("admin.api").With(
668 zap.String("method", r.Method),
669 zap.String("host", r.Host),
670 zap.String("uri", r.RequestURI),
666 - zap.String("remote_addr", r.RemoteAddr),
671 + zap.String("remote_ip", ip),
672 + zap.String("remote_port", port),
673 zap.Reflect("headers", r.Header),
674 )
675 if r.TLS != nil {
caddyconfig/httpcaddyfile/builtins_test.go
+2 -2
@@ -37,7 +37,7 @@ func TestLogDirectiveSyntax(t *testing.T) {
37 format filter {
38 wrap console
39 fields {
40 - request>remote_addr ip_mask {
40 + request>remote_ip ip_mask {
41 ipv4 24
42 ipv6 32
43 }
@@ -46,7 +46,7 @@ func TestLogDirectiveSyntax(t *testing.T) {
46 }
47 }
48 `,
49 - output: `{"logging":{"logs":{"default":{"exclude":["http.log.access.log0"]},"log0":{"encoder":{"fields":{"request\u003eremote_addr":{"filter":"ip_mask","ipv4_cidr":24,"ipv6_cidr":32}},"format":"filter","wrap":{"format":"console"}},"include":["http.log.access.log0"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":8080"],"logs":{"default_logger_name":"log0"}}}}}}`,
49 + output: `{"logging":{"logs":{"default":{"exclude":["http.log.access.log0"]},"log0":{"encoder":{"fields":{"request\u003eremote_ip":{"filter":"ip_mask","ipv4_cidr":24,"ipv6_cidr":32}},"format":"filter","wrap":{"format":"console"}},"include":["http.log.access.log0"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":8080"],"logs":{"default_logger_name":"log0"}}}}}}`,
50 expectError: false,
51 },
52 {
caddytest/integration/caddyfile_adapt/global_options_log_custom.txt
+2 -2
@@ -3,7 +3,7 @@
3 format filter {
4 wrap console
5 fields {
6 - request>remote_addr ip_mask {
6 + request>remote_ip ip_mask {
7 ipv4 24
8 ipv6 32
9 }
@@ -18,7 +18,7 @@
18 "custom-logger": {
19 "encoder": {
20 "fields": {
21 - "request\u003eremote_addr": {
21 + "request\u003eremote_ip": {
22 "filter": "ip_mask",
23 "ipv4_cidr": 24,
24 "ipv6_cidr": 32
caddytest/integration/caddyfile_adapt/log_filters.txt
+2 -2
@@ -15,7 +15,7 @@ log {
15 replace foo REDACTED
16 delete bar
17 }
18 - request>remote_addr ip_mask {
18 + request>remote_ip ip_mask {
19 ipv4 24
20 ipv6 32
21 }
@@ -64,7 +64,7 @@ log {
64 "request\u003eheaders\u003eServer": {
65 "filter": "delete"
66 },
67 - "request\u003eremote_addr": {
67 + "request\u003eremote_ip": {
68 "filter": "ip_mask",
69 "ipv4_cidr": 24,
70 "ipv6_cidr": 32
modules/caddyhttp/marshalers.go
+9 -1
@@ -16,6 +16,7 @@ package caddyhttp
16
17 import (
18 "crypto/tls"
19 + "net"
20 "net/http"
21 "strings"
22
@@ -27,7 +28,14 @@ type LoggableHTTPRequest struct{ *http.Request }
28
29 // MarshalLogObject satisfies the zapcore.ObjectMarshaler interface.
30 func (r LoggableHTTPRequest) MarshalLogObject(enc zapcore.ObjectEncoder) error {
30 - enc.AddString("remote_addr", r.RemoteAddr)
31 + ip, port, err := net.SplitHostPort(r.RemoteAddr)
32 + if err != nil {
33 + ip = r.RemoteAddr
34 + port = ""
35 + }
36 +
37 + enc.AddString("remote_ip", ip)
38 + enc.AddString("remote_port", port)
39 enc.AddString("proto", r.Proto)
40 enc.AddString("method", r.Method)
41 enc.AddString("host", r.Host)