Files
coredns/plugin/log/README.md

152 lines
3.7 KiB
Markdown
Raw Normal View History

# log
2016-03-19 11:16:08 +00:00
## Name
*log* - enables query logging to standard output.
## Description
By just using *log* you dump all queries (and parts for the reply) on standard output. Options exist
to tweak the output a little. The date/time prefix on log lines is RFC3339 formatted with
milliseconds.
Note that for busy servers logging will incur a performance hit.
2016-03-19 11:16:08 +00:00
## Syntax
~~~ txt
2016-03-19 11:16:08 +00:00
log
~~~
* With no arguments, a query log entry is written to *stdout* in the common log format for all requests
2016-03-19 11:16:08 +00:00
Or if you want/need slightly more control:
2016-03-19 11:16:08 +00:00
~~~ txt
log [NAME] [FORMAT]
2016-03-19 11:16:08 +00:00
~~~
* `NAME` is the name to match in order to be logged
* `FORMAT` is the log format to use (default is Common Log Format)
2016-03-19 11:16:08 +00:00
2018-04-11 21:07:10 +03:00
You can further specify the classes of responses that get logged:
~~~ txt
log [NAME] [FORMAT] {
2018-04-11 21:07:10 +03:00
class CLASSES...
}
~~~
2018-04-11 21:07:10 +03:00
* `CLASSES` is a space-separated list of classes of responses that should be logged
The classes of responses have the following meaning:
* `success`: successful response
* `denial`: either NXDOMAIN or NODATA (name exists, type does not)
2016-11-09 13:02:06 +00:00
* `error`: SERVFAIL, NOTIMP, REFUSED, etc. Anything that indicates the remote server is not willing to
resolve the request.
2018-04-11 21:07:10 +03:00
* `all`: the default - nothing is specified. Using of this class means that all messages will be logged whatever we mix together with "all".
2016-11-09 13:02:06 +00:00
If no class is specified, it defaults to *all*.
2016-03-19 11:16:08 +00:00
## Log Format
You can specify a custom log format with any placeholder values. Log supports both request and
response placeholders.
The following place holders are supported:
* `{type}`: qtype of the request
* `{name}`: qname of the request
* `{class}`: qclass of the request
* `{proto}`: protocol used (tcp or udp)
* `{remote}`: client's IP address, for IPv6 addresses these are enclosed in brackets: `[::1]`
* `{local}`: server's IP address, for IPv6 addresses these are enclosed in brackets: `[::1]`
* `{size}`: request size in bytes
* `{port}`: client's port
* `{duration}`: response duration
* `{rcode}`: response RCODE
* `{rsize}`: raw (uncompressed), response size (a client may receive a smaller response)
* `{>rflags}`: response flags, each set flag will be displayed, e.g. "aa, tc". This includes the qr
bit as well
* `{>bufsize}`: the EDNS0 buffer size advertised in the query
* `{>do}`: is the EDNS0 DO (DNSSEC OK) bit set in the query
* `{>id}`: query ID
* `{>opcode}`: query OPCODE
* `{/[LABEL]}`: any metadata label is accepted as a place holder if it is enclosed between `{/` and `}`.
the place holder will be replaced by the corresponding metadata value or the default value `-` if label is not defined.
The default Common Log Format is:
~~~ txt
`{remote}:{port} - {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
~~~
2016-03-19 11:16:08 +00:00
Each of these logs will be outputted with `log.Infof`, so a typical example looks like this:
~~~ txt
2018-10-30T19:10:07.547Z [INFO] [::1]:50759 - 29008 "A IN example.org. udp 41 false 4096" NOERROR qr,rd,ra,ad 68 0.037990251s
~~~~
2016-03-19 11:16:08 +00:00
## Examples
Log all requests to stdout
2016-03-19 11:16:08 +00:00
~~~ corefile
. {
log
whoami
}
2016-03-19 11:16:08 +00:00
~~~
Custom log format, for all zones (`.`)
2016-03-19 11:16:08 +00:00
~~~ corefile
. {
log . "{proto} Request: {name} {type} {>id}"
}
2016-03-19 11:16:08 +00:00
~~~
Only log denials for example.org (and below to a file)
~~~ corefile
. {
log example.org {
class denial
}
}
~~~
2018-04-11 21:07:10 +03:00
Log all queries which were not resolved successfully
~~~ corefile
. {
log . {
class denial error
}
}
~~~
Log all queries on which we did not get errors
~~~ corefile
. {
log . {
class denial success
}
}
~~~
Also the multiple statements can be OR-ed, for example, we can rewrite the above case as following:
~~~ corefile
. {
log . {
class denial
class success
}
}
~~~