dnsforward: slog logger

This commit is contained in:
Dimitry Kolyshev 2024-07-05 11:49:37 +03:00
parent 3d7f734ac9
commit 5932c8d102
7 changed files with 41 additions and 4 deletions

View File

@ -8,6 +8,7 @@ import (
"testing" "testing"
"github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/testutil"
"github.com/quic-go/quic-go" "github.com/quic-go/quic-go"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -217,7 +218,8 @@ func TestServer_clientIDFromDNSContext(t *testing.T) {
} }
srv := &Server{ srv := &Server{
conf: ServerConfig{TLSConfig: tlsConf}, conf: ServerConfig{TLSConfig: tlsConf},
logger: slogutil.NewDiscardLogger(),
} }
var ( var (

View File

@ -22,6 +22,7 @@ import (
"github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/container"
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/stringutil" "github.com/AdguardTeam/golibs/stringutil"
"github.com/AdguardTeam/golibs/timeutil" "github.com/AdguardTeam/golibs/timeutil"
@ -341,6 +342,10 @@ func (s *Server) newProxyConfig() (conf *proxy.Config, err error) {
MessageConstructor: s, MessageConstructor: s,
} }
if s.logger != nil {
conf.Logger = s.logger.With(slogutil.KeyPrefix, "dnsproxy")
}
if srvConf.EDNSClientSubnet.UseCustom { if srvConf.EDNSClientSubnet.UseCustom {
// TODO(s.chzhen): Use netip.Addr instead of net.IP inside dnsproxy. // TODO(s.chzhen): Use netip.Addr instead of net.IP inside dnsproxy.
conf.EDNSAddr = net.IP(srvConf.EDNSClientSubnet.CustomIP.AsSlice()) conf.EDNSAddr = net.IP(srvConf.EDNSClientSubnet.CustomIP.AsSlice())

View File

@ -6,6 +6,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"log/slog"
"net" "net"
"net/http" "net/http"
"net/netip" "net/netip"
@ -27,6 +28,7 @@ import (
"github.com/AdguardTeam/golibs/cache" "github.com/AdguardTeam/golibs/cache"
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/netutil/sysresolv" "github.com/AdguardTeam/golibs/netutil/sysresolv"
"github.com/AdguardTeam/golibs/stringutil" "github.com/AdguardTeam/golibs/stringutil"
@ -121,6 +123,12 @@ type Server struct {
// access drops disallowed clients. // access drops disallowed clients.
access *accessManager access *accessManager
// logger is used for logging during server routines.
//
// TODO(d.kolyshev): Make it never nil.
// TODO(d.kolyshev): Use this logger.
logger *slog.Logger
// localDomainSuffix is the suffix used to detect internal hosts. It // localDomainSuffix is the suffix used to detect internal hosts. It
// must be a valid domain name plus dots on each side. // must be a valid domain name plus dots on each side.
localDomainSuffix string localDomainSuffix string
@ -197,6 +205,7 @@ type DNSCreateParams struct {
PrivateNets netutil.SubnetSet PrivateNets netutil.SubnetSet
Anonymizer *aghnet.IPMut Anonymizer *aghnet.IPMut
EtcHosts *aghnet.HostsContainer EtcHosts *aghnet.HostsContainer
Logger *slog.Logger
LocalDomain string LocalDomain string
} }
@ -227,12 +236,18 @@ func NewServer(p DNSCreateParams) (s *Server, err error) {
etcHosts = upstream.NewHostsResolver(p.EtcHosts) etcHosts = upstream.NewHostsResolver(p.EtcHosts)
} }
l := p.Logger
if l == nil {
l = slog.Default()
}
s = &Server{ s = &Server{
dnsFilter: p.DNSFilter, dnsFilter: p.DNSFilter,
dhcpServer: p.DHCPServer, dhcpServer: p.DHCPServer,
stats: p.Stats, stats: p.Stats,
queryLog: p.QueryLog, queryLog: p.QueryLog,
privateNets: p.PrivateNets, privateNets: p.PrivateNets,
logger: l.With(slogutil.KeyPrefix, "dnsforward"),
// TODO(e.burkov): Use some case-insensitive string comparison. // TODO(e.burkov): Use some case-insensitive string comparison.
localDomainSuffix: strings.ToLower(localDomainSuffix), localDomainSuffix: strings.ToLower(localDomainSuffix),
etcHosts: etcHosts, etcHosts: etcHosts,
@ -719,6 +734,10 @@ func (s *Server) prepareInternalProxy() (err error) {
MessageConstructor: s, MessageConstructor: s,
} }
if s.logger != nil {
conf.Logger = s.logger.With(slogutil.KeyPrefix, "dnsproxy")
}
err = setProxyUpstreamMode(conf, srvConf.UpstreamMode, srvConf.FastestTimeout.Duration) err = setProxyUpstreamMode(conf, srvConf.UpstreamMode, srvConf.FastestTimeout.Duration)
if err != nil { if err != nil {
return fmt.Errorf("invalid upstream mode: %w", err) return fmt.Errorf("invalid upstream mode: %w", err)

View File

@ -10,6 +10,7 @@ import (
"github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/AdGuardHome/internal/filtering"
"github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/dnsproxy/upstream"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/testutil"
"github.com/AdguardTeam/urlfilter/rules" "github.com/AdguardTeam/urlfilter/rules"
@ -430,6 +431,7 @@ func TestServer_ProcessDHCPHosts_localRestriction(t *testing.T) {
dnsFilter: createTestDNSFilter(t), dnsFilter: createTestDNSFilter(t),
dhcpServer: dhcp, dhcpServer: dhcp,
localDomainSuffix: localDomainSuffix, localDomainSuffix: localDomainSuffix,
logger: slogutil.NewDiscardLogger(),
} }
req := &dns.Msg{ req := &dns.Msg{
@ -565,6 +567,7 @@ func TestServer_ProcessDHCPHosts(t *testing.T) {
dnsFilter: createTestDNSFilter(t), dnsFilter: createTestDNSFilter(t),
dhcpServer: testDHCP, dhcpServer: testDHCP,
localDomainSuffix: tc.suffix, localDomainSuffix: tc.suffix,
logger: slogutil.NewDiscardLogger(),
} }
req := &dns.Msg{ req := &dns.Msg{

View File

@ -11,6 +11,7 @@ import (
"github.com/AdguardTeam/AdGuardHome/internal/stats" "github.com/AdguardTeam/AdGuardHome/internal/stats"
"github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/proxy"
"github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/dnsproxy/upstream"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/miekg/dns" "github.com/miekg/dns"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -202,6 +203,7 @@ func TestServer_ProcessQueryLogsAndStats(t *testing.T) {
ql := &testQueryLog{} ql := &testQueryLog{}
st := &testStats{} st := &testStats{}
srv := &Server{ srv := &Server{
logger: slogutil.NewDiscardLogger(),
queryLog: ql, queryLog: ql,
stats: st, stats: st,
anonymizer: aghnet.NewIPMut(nil), anonymizer: aghnet.NewIPMut(nil),

View File

@ -130,6 +130,7 @@ func initDNSServer(
tlsConf *tlsConfigSettings, tlsConf *tlsConfigSettings,
) (err error) { ) (err error) {
Context.dnsServer, err = dnsforward.NewServer(dnsforward.DNSCreateParams{ Context.dnsServer, err = dnsforward.NewServer(dnsforward.DNSCreateParams{
Logger: Context.logger,
DNSFilter: filters, DNSFilter: filters,
Stats: sts, Stats: sts,
QueryLog: qlog, QueryLog: qlog,

View File

@ -6,6 +6,7 @@ import (
"crypto/x509" "crypto/x509"
"fmt" "fmt"
"io/fs" "io/fs"
"log/slog"
"net/http" "net/http"
"net/netip" "net/netip"
"net/url" "net/url"
@ -62,6 +63,9 @@ type homeContext struct {
// configuration files, for example /etc/hosts. // configuration files, for example /etc/hosts.
etcHosts *aghnet.HostsContainer etcHosts *aghnet.HostsContainer
// logger is an instance of [*slog.Logger]. It is never nil.
logger *slog.Logger
// mux is our custom http.ServeMux. // mux is our custom http.ServeMux.
mux *http.ServeMux mux *http.ServeMux
@ -137,12 +141,13 @@ func Main(clientBuildFS fs.FS) {
} }
// setupContext initializes [Context] fields. It also reads and upgrades // setupContext initializes [Context] fields. It also reads and upgrades
// config file if necessary. // config file if necessary. l must not be nil.
func setupContext(opts options) (err error) { func setupContext(opts options, l *slog.Logger) (err error) {
Context.firstRun = detectFirstRun() Context.firstRun = detectFirstRun()
Context.tlsRoots = aghtls.SystemRootCAs() Context.tlsRoots = aghtls.SystemRootCAs()
Context.mux = http.NewServeMux() Context.mux = http.NewServeMux()
Context.logger = l
if Context.firstRun { if Context.firstRun {
log.Info("This is the first time AdGuard Home is launched") log.Info("This is the first time AdGuard Home is launched")
@ -565,7 +570,7 @@ func run(opts options, clientBuildFS fs.FS, done chan struct{}) {
l.Info("AdGuard Home is running as a service") l.Info("AdGuard Home is running as a service")
} }
err = setupContext(opts) err = setupContext(opts, l)
fatalOnError(err) fatalOnError(err)
err = configureOS(config) err = configureOS(config)