说明
仅使用 log,您可以将标准输出上的所有查询(以及答复部分)转储。选项可以对输出进行一些调整。请注意,对于繁忙的服务器,日志记录会降低性能。
启用或禁用 log 插件仅影响查询日志记录,无论如何都会显示 CoreDNS 的任何其他日志。
语法
log
如果没有参数,则查询日志记录条目将针对所有请求以公共日志格式写入 stdout。或者如果您想要/需要更多控制
log [NAMES...] [FORMAT]
NAMES
是为了进行日志记录而匹配的名称列表FORMAT
是要使用的日志格式(默认为常见日志格式),{common}
用于作为常见日志格式的快捷方式。您还可以对格式使用{combined}
,它会向常见日志格式添加查询操作码{>opcode}
。
您可以进一步指定被记录的答复类别
log [NAMES...] [FORMAT] {
class CLASSES...
}
CLASSES
是应记录的答复类别的空格分隔列表
答复类别的含义如下
success
:成功答复denial
:NXDOMAIN 或 nodata 答复(名称存在,类型不存在)。nodata 答复会将返回代码设为 NOERROR。error
:SERVFAIL、NOTIMP、REFUSED 等。任何表明远程服务器不愿解析请求的内容。all
:默认为 - 未指定任何内容。使用此类别表示将记录所有消息,无论我们将什么与 “all” 混用。
如果未指定任何类别,它将默认为 all
。
日志格式
您可以使用任何占位符值指定自定义日志格式。日志同时支持请求和答复占位符。
支持以下占位符
{type}
:请求的 qtype{name}
:请求的 qname{class}
:请求的 qclass{proto}
:使用的协议(tcp 或 udp){remote}
:客户端 IP 地址,对于 IPv6 地址,它们用括号括起来:[::1]
{local}
:服务器 IP 地址,对于 IPv6 地址,它们用括号括起来:[::1]
{size}
:请求大小(以字节为单位){port}
:客户端端口{duration}
:响应持续时间{rcode}
:响应 RCODE{rsize}
:原始(未压缩)响应大小(客户端可能会收到更小的响应){>rflags}
:响应标志,每个设置的标志都将显示,例如 “aa, tc”。这也包括 qr 位{>bufsize}
:查询中通告的 EDNS0 缓冲区大小{>do}
:查询中是否设置了 EDNS0 DO(DNSSEC OK)位{>id}
:查询 ID{>opcode}
:查询 OPCODE{common}
:默认的 Common Log Format(通用日志格式)。{combined}
:包含查询 opcode 的 Common Log Format(通用日志格式)。{/LABEL}
:如果任何元数据标签被括在{/
和}
之间,则该标签将被接受为占位符,占位符将被对应的元数据值替换,或在未定义该标签时被默认值-
替换。请参见metadata 插件,了解更多信息。
默认的 Common Log Format(通用日志格式)为
`{remote}:{port} - {>id} "{type} {class} {name} {proto} {size} {>do} {>bufsize}" {rcode} {>rflags} {rsize} {duration}`
将使用 log.Infof
输出各项日志,因此常见的示例类似于这样
[INFO] [::1]:50759 - 29008 "A IN example.org. udp 41 false 4096" NOERROR qr,rd,ra,ad 68 0.037990251s
示例
将所有请求记录到 stdout
. {
log
whoami
}
为所有区域(.
)应用自定义日志格式
. {
log . "{proto} Request: {name} {type} {>id}"
}
仅记录 example.org(及以下区域)的否定结果(NXDOMAIN 和 nodata)。
. {
log example.org {
class denial
}
}
记录所有未在 Combined Log Format(通用日志格式)中成功解析的查询。
. {
log . {combined} {
class denial error
}
}
记录所有未出现错误的查询
. {
log . {
class denial success
}
}
还可对多项声明使用 OR 运算符,例如,我们可以将上述情况重写为如下形式
. {
log . {
class denial
class success
}
}