日誌

原始碼

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

日誌格式

您可以指定具有任何佔位符值的自訂日誌格式。Log 支援請求和回應佔位符。

支援以下佔位符

  • {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}:預設的通用日誌格式。
  • {combined}:帶有查詢操作碼的通用日誌格式。
  • {/LABEL}:如果任何中繼資料標籤包含在 {/} 之間,則該標籤會被接受為佔位符,佔位符將被相應的中繼資料值取代,如果標籤未定義,則使用預設值 -。請參閱 metadata 外掛以取得更多資訊。

預設的通用日誌格式是

`{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
    }
}

以組合日誌格式記錄所有未成功解析的查詢。

. {
    log . {combined} {
        class denial error
    }
}

記錄所有沒有錯誤的查詢

. {
    log . {
        class denial success
    }
}

此外,多個語句可以使用 OR 運算,例如,我們可以將上述情況重寫如下

. {
    log . {
        class denial
        class success
    }
}