aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/log/README.md4
-rw-r--r--plugin/log/log.go2
-rw-r--r--plugin/pkg/replacer/replacer.go10
3 files changed, 12 insertions, 4 deletions
diff --git a/plugin/log/README.md b/plugin/log/README.md
index 26a79f7f5..c0c208534 100644
--- a/plugin/log/README.md
+++ b/plugin/log/README.md
@@ -59,7 +59,7 @@ The following place holders are supported:
* `{class}`: qclass of the request
* `{proto}`: protocol used (tcp or udp)
* `{when}`: time of the query
-* `{remote}`: client's IP address
+* `{remote}`: client's IP address, for IPv6 addresses these are enclosed in brackets: `[::1]`
* `{size}`: request size in bytes
* `{port}`: client's port
* `{duration}`: response duration
@@ -75,7 +75,7 @@ The following place holders are supported:
The default Common Log Format is:
~~~ txt
-`{remote} - [{when}] {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
+`{remote}:{port} - [{when}] {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
~~~
## Examples
diff --git a/plugin/log/log.go b/plugin/log/log.go
index 247b7355d..26e825c8f 100644
--- a/plugin/log/log.go
+++ b/plugin/log/log.go
@@ -78,7 +78,7 @@ type Rule struct {
const (
// CommonLogFormat is the common log format.
- CommonLogFormat = `{remote} ` + CommonLogEmptyValue + ` [{when}] {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
+ CommonLogFormat = `{remote}:{port} ` + CommonLogEmptyValue + ` [{when}] {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
// CommonLogEmptyValue is the common empty log value.
CommonLogEmptyValue = "-"
// CombinedLogFormat is the combined log format.
diff --git a/plugin/pkg/replacer/replacer.go b/plugin/pkg/replacer/replacer.go
index c10022f79..1775f7c24 100644
--- a/plugin/pkg/replacer/replacer.go
+++ b/plugin/pkg/replacer/replacer.go
@@ -43,7 +43,7 @@ func New(r *dns.Msg, rr *dnstest.Recorder, emptyValue string) Replacer {
return time.Now().Format(timeFormat)
}(),
"{size}": strconv.Itoa(req.Len()),
- "{remote}": req.IP(),
+ "{remote}": addrToRFC3986(req.IP()),
"{port}": req.Port(),
},
emptyValue: emptyValue,
@@ -155,6 +155,14 @@ func flagsToString(h dns.MsgHdr) string {
return strings.Join(flags[:i], ",")
}
+// addrToRFC3986 will add brackets to the address if it is an IPv6 address.
+func addrToRFC3986(addr string) string {
+ if strings.Contains(addr, ":") {
+ return "[" + addr + "]"
+ }
+ return addr
+}
+
const (
timeFormat = "02/Jan/2006:15:04:05 -0700"
headerReplacer = "{>"