Add opt-in JSON logging with structured DNS query fields (#8553)

* plugin/pkg/log: add opt-in JSON logging backend

Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com>

* plugin/log: emit typed query records in JSON mode

Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com>

* coremain: expose process-wide JSON logging

Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com>

---------

Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com>
This commit is contained in:
houyuwushang
2026-09-17 08:50:39 +08:00
committed by GitHub
parent 84a93a0b89
commit b93e449b2f
20 changed files with 1064 additions and 22 deletions

View File

@@ -8,17 +8,26 @@ import (
// P is a logger that includes the plugin doing the logging.
type P struct {
plugin string
name string
}
// NewWithPlugin returns a logger that includes "plugin/name: " in the log message.
// I.e [INFO] plugin/<name>: message.
func NewWithPlugin(name string) P { return P{"plugin/" + name + ": "} }
func NewWithPlugin(name string) P { return P{plugin: "plugin/" + name + ": ", name: name} }
func (p P) logf(level, format string, v ...any) {
if b := jsonBackend.Load(); b != nil {
b.log(level, p.name, fmt.Sprintf(format, v...))
return
}
log(level, p.plugin, fmt.Sprintf(format, v...))
}
func (p P) log(level string, v ...any) {
if b := jsonBackend.Load(); b != nil {
b.log(level, p.name, fmt.Sprint(v...))
return
}
log(level+p.plugin, v...)
}