日志

源代码

log 已启用标准输出的查询日志记录。

说明

仅使用 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
    }
}