Pull request 2743: AGDNS-4363-rm-more-old-log-from-pkg-home

Squashed commit of the following:

commit 6a0b937e2c576f2225711bd1e5ebb6e1c3f0ad8b
Merge: 7a4cba6de 9800b51e6
Author: Maksim Kazantsev <m.kazantsev@adguard.com>
Date:   Thu Aug 6 09:21:09 2026 +0400

    Merge branch 'master' into AGDNS-4363-rm-more-old-log-from-pkg-home

commit 7a4cba6de5dcb046d2e86cf659f1f10a12705f06
Author: Maksim Kazantsev <m.kazantsev@adguard.com>
Date:   Wed Aug 5 17:20:27 2026 +0400

    home: imp log format;

commit 9ab2afe7e6b691353b50301fe4a226cedbb54763
Merge: 4b7b57d1e 4a3c64c17
Author: Maksim Kazantsev <m.kazantsev@adguard.com>
Date:   Wed Aug 5 17:16:34 2026 +0400

    Merge branch 'master' into AGDNS-4363-rm-more-old-log-from-pkg-home

commit 4b7b57d1ee72038dee7c83a064ba2d21a3b26a85
Author: Maksim Kazantsev <m.kazantsev@adguard.com>
Date:   Wed Aug 5 17:13:59 2026 +0400

    home: imp code; imp docs; make:

commit ddb27dd78bf8ef2f9f9c8ce6c34ce45306005acd
Author: Maksim Kazantsev <m.kazantsev@adguard.com>
Date:   Wed Aug 5 11:24:00 2026 +0400

    home: rm old log; scripts: upd;
This commit is contained in:
Maksim Kazantsev committed 2026-08-06 05:28:11 +00:00
1 parent 9800b51e60
commit b2e25729e1
6 files changed
+84 -50

No files matched your search

+1 -1
View File
@@ -659,7 +659,7 @@ func startMods(
err = startDNSServer()
if err != nil {
closeDNSServer(ctx)
closeDNSServer(ctx, baseLogger)
return err
}
+11 -8
View File
@@ -23,7 +23,6 @@ import (
"github.com/AdguardTeam/AdGuardHome/internal/stats"
"github.com/AdguardTeam/dnscrypt"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/netutil/httputil"
@@ -155,7 +154,7 @@ func initDNSServer(
// error and consider removing this defer.
defer func() {
if err != nil {
closeDNSServer(ctx)
closeDNSServer(ctx, params.Logger)
}
}()
if err != nil {
@@ -480,7 +479,9 @@ func startDNSServer() (err error) {
return nil
}
func stopDNSServer(ctx context.Context) (err error) {
// stopDNSServer stops the DNS server and closes all the DNS modules. l must
// not be nil.
func stopDNSServer(ctx context.Context, l *slog.Logger) (err error) {
if !isRunning() {
return nil
}
@@ -495,12 +496,14 @@ func stopDNSServer(ctx context.Context) (err error) {
return fmt.Errorf("closing clients container: %w", err)
}
closeDNSServer(ctx)
closeDNSServer(ctx, l)
return nil
}
func closeDNSServer(ctx context.Context) {
// closeDNSServer closes the DNS server and the modules it depends on. l must
// not be nil.
func closeDNSServer(ctx context.Context, l *slog.Logger) {
// DNS forward module must be closed BEFORE stats or queryLog because it depends on them
if globalContext.dnsServer != nil {
globalContext.dnsServer.Close(ctx)
@@ -514,18 +517,18 @@ func closeDNSServer(ctx context.Context) {
if globalContext.stats != nil {
err := globalContext.stats.Close()
if err != nil {
log.Error("closing stats: %s", err)
l.ErrorContext(ctx, "closing stats", slogutil.KeyError, err)
}
}
if globalContext.queryLog != nil {
err := globalContext.queryLog.Shutdown(ctx)
if err != nil {
log.Error("closing query log: %s", err)
l.ErrorContext(ctx, "closing query log", slogutil.KeyError, err)
}
}
log.Debug("all dns modules are closed")
l.DebugContext(ctx, "all dns modules are closed")
}
// checkStatsAndQuerylogDirs checks and returns directory paths to store
+46 -32
View File
@@ -5,6 +5,7 @@ import (
"context"
"fmt"
"io/fs"
"log"
"log/slog"
"net/http"
"net/netip"
@@ -40,7 +41,6 @@ import (
"github.com/AdguardTeam/dnsproxy/upstream"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/hostsfile"
"github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/netutil/httputil"
@@ -103,7 +103,7 @@ func Main(clientBuildFS fs.FS) {
// Configure log level and output.
err = configureLogger(ls, workDir)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
// Print the first message after logger is configured.
baseLogger.InfoContext(ctx, "starting adguard home", "version", version.Full())
@@ -115,7 +115,7 @@ func Main(clientBuildFS fs.FS) {
var glTokenFileRoot *os.Root
if opts.glinetMode {
glTokenFileRoot, err = os.OpenRoot("/tmp/")
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
}
done := make(chan struct{})
@@ -123,7 +123,7 @@ func Main(clientBuildFS fs.FS) {
signals := make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT)
pidFilePath := setPIDFilePath(opts)
pidFilePath := setPIDFilePath(ctx, baseLogger, opts)
var (
hc *aghnet.HostsContainer
@@ -131,7 +131,7 @@ func Main(clientBuildFS fs.FS) {
)
if !opts.noEtcHosts {
hc, hcWatcher, err = newHostsContainer(ctx, baseLogger)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
}
sigHdlrLogger := baseLogger.With(slogutil.KeyPrefix, "signalhdlr")
@@ -374,9 +374,9 @@ func initContextClients(
}
// setPIDFilePath writes the PID value to a file and returns its path, if the
// PID file option is specified.
func setPIDFilePath(opts options) (pidFilePath string) {
if opts.pidFile != "" && !opts.performUpdate && writePIDFile(opts.pidFile) {
// PID file option is specified. l must not be nil.
func setPIDFilePath(ctx context.Context, l *slog.Logger, opts options) (pidFilePath string) {
if opts.pidFile != "" && !opts.performUpdate && writePIDFile(ctx, l, opts.pidFile) {
pidFilePath = opts.pidFile
}
@@ -756,9 +756,13 @@ func suggestedWebPort(ctx context.Context, l *slog.Logger) (p uint16) {
return uint16(v)
}
func fatalOnError(err error) {
// fatalOnError logs err and exits with a failure exit code if err is not nil.
// l must not be nil.
func fatalOnError(ctx context.Context, l *slog.Logger, err error) {
if err != nil {
log.Fatal(err)
l.ErrorContext(ctx, "fatal error", slogutil.KeyError, err)
os.Exit(osutil.ExitCodeFailure)
}
}
@@ -791,7 +795,7 @@ func run(
setupContext(ctx, baseLogger, opts, workDir, confPath, isFirstRun)
err := configureOS(ctx, baseLogger, config)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
// Clients package uses filtering package's static data
// (filtering.BlockedSvcKnown()), so we have to initialize filtering static
@@ -806,10 +810,10 @@ func run(
)
err = initContextClients(ctx, baseLogger, sigHdlr, confModifier, httpReg, workDir, hc)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
tlsMgr, err := initTLS(ctx, baseLogger, sigHdlr, confModifier, httpReg)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
err = setupDNSFilteringConf(
ctx,
@@ -821,19 +825,23 @@ func run(
workDir,
hc,
)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
err = setupBindOpts(opts)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
upd, isCustomURL := initUpdate(ctx, baseLogger, opts, tlsMgr, isFirstRun, workDir, confPath)
dataDirPath := filepath.Join(workDir, dataDir)
err = os.MkdirAll(dataDirPath, aghos.DefaultPermDir)
fatalOnError(errors.Annotate(err, "creating DNS data dir at %s: %w", dataDirPath))
fatalOnError(
ctx,
baseLogger,
errors.Annotate(err, "creating dns data dir at %q: %w", dataDirPath),
)
auth, err := initUsers(ctx, baseLogger, workDir, mux, opts.glinetMode, glTokenFileRoot)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
confModifier.setAuth(auth)
@@ -856,7 +864,7 @@ func run(
}
web, err := newWeb(ctx, conf)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
mw.set(web)
@@ -865,7 +873,7 @@ func run(
tlsMgr.setWebAPI(web)
statsDir, querylogDir, err := checkStatsAndQuerylogDirs(config, workDir)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
if !isFirstRun {
runDNSServer(ctx, baseLogger, tlsMgr, confModifier, statsDir, querylogDir, httpReg, hc, web.conf.mux)
@@ -896,15 +904,15 @@ func runDNSServer(
mux httputil.Router,
) {
err := initDNS(ctx, slogLogger, tlsMgr, confModifier, httpReg, statsDir, querylogDir, hc, mux)
fatalOnError(err)
fatalOnError(ctx, slogLogger, err)
tlsMgr.start(ctx)
go func() {
startErr := startDNSServer()
if startErr != nil {
closeDNSServer(ctx)
fatalOnError(startErr)
closeDNSServer(ctx, slogLogger)
fatalOnError(ctx, slogLogger, startErr)
}
}()
@@ -977,7 +985,7 @@ func initUpdate(
confPath string,
) (upd *updater.Updater, isCustomURL bool) {
execPath, err := os.Executable()
fatalOnError(errors.Annotate(err, "getting executable path: %w"))
fatalOnError(ctx, baseLogger, errors.Annotate(err, "getting executable path: %w"))
updLogger := baseLogger.With(slogutil.KeyPrefix, "updater")
upd, isCustomURL = newUpdater(
@@ -996,7 +1004,7 @@ func initUpdate(
if !isFirstRun {
// Save the updated config.
err = config.write(ctx, baseLogger, nil, nil, workDir, confPath)
fatalOnError(err)
fatalOnError(ctx, baseLogger, err)
if config.HTTPConfig.Pprof.Enabled {
startPprof(baseLogger, config.HTTPConfig.Pprof.Port)
@@ -1175,14 +1183,17 @@ func checkNetworkPermissions(ctx context.Context, l *slog.Logger) {
l.InfoContext(ctx, "adguard home can bind to port 53")
}
// Write PID to a file
func writePIDFile(fn string) bool {
// writePIDFile writes the PID of the current process to the file at fn. l
// must not be nil.
func writePIDFile(ctx context.Context, l *slog.Logger, fn string) (ok bool) {
data := fmt.Sprintf("%d", os.Getpid())
err := os.WriteFile(fn, []byte(data), 0o644)
if err != nil {
log.Error("Couldn't write PID to file %s: %v", fn, err)
l.ErrorContext(ctx, "writing pid file", "path", fn, slogutil.KeyError, err)
return false
}
return true
}
@@ -1238,7 +1249,7 @@ func initWorkingDir(opts options) (workDir string, err error) {
func cleanup(ctx context.Context, l *slog.Logger, hc *aghnet.HostsContainer) {
l.InfoContext(ctx, "stopping adguard home")
err := stopDNSServer(ctx)
err := stopDNSServer(ctx, l)
if err != nil {
l.ErrorContext(ctx, "stopping dns server", slogutil.KeyError, err)
}
@@ -1276,10 +1287,13 @@ func exitWithError() {
// loadCmdLineOpts reads command line arguments and initializes configuration
// from them. If there is an error or an effect, loadCmdLineOpts processes them
// and exits.
//
// TODO(m.kazantsev): Consider refactoring the logs so that it
// resembles AdGuard DNS CLI.
func loadCmdLineOpts() (opts options) {
opts, eff, err := parseCmdOpts(os.Args[0], os.Args[1:])
if err != nil {
log.Error("%s", err)
log.Printf("error: %s\n", err)
printHelp(os.Args[0])
exitWithError()
@@ -1288,7 +1302,7 @@ func loadCmdLineOpts() (opts options) {
if eff != nil {
err = eff()
if err != nil {
log.Error("%s", err)
log.Printf("error: %s\n", err)
exitWithError()
}
@@ -1417,7 +1431,7 @@ func cmdlineUpdate(
tlsMgr,
agh.EmptyConfigModifier{},
)
fatalOnError(err)
fatalOnError(ctx, l, err)
l.InfoContext(ctx, "performing update via cli")
@@ -1435,7 +1449,7 @@ func cmdlineUpdate(
}
err = upd.Update(ctx, isFirstRun)
fatalOnError(err)
fatalOnError(ctx, l, err)
err = restartService(ctx, l)
if err != nil {
+1 -1
View File
@@ -143,7 +143,7 @@ func readLogSettings(
err = yaml.Unmarshal(yamlFile, conf)
if err != nil {
log.Error("Couldn't get logging settings from the configuration: %s", err)
l.ErrorContext(ctx, "getting logging settings from config", slogutil.KeyError, err)
}
return &conf.Log
+3 -3
View File
@@ -3,6 +3,7 @@ package home
import (
"fmt"
"iter"
"log"
"net/netip"
"os"
"slices"
@@ -11,7 +12,6 @@ import (
"github.com/AdguardTeam/AdGuardHome/internal/configmigrate"
"github.com/AdguardTeam/AdGuardHome/internal/version"
"github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/osutil"
"github.com/AdguardTeam/golibs/stringutil"
)
@@ -264,7 +264,7 @@ var cmdLineOpts = []cmdLineOpt{{
updateWithValue: nil,
updateNoValue: nil,
effect: func(_ options, _ string) (f effect, err error) {
log.Info("warning: using --no-mem-optimization flag has no effect and is deprecated")
log.Println("warning: using --no-mem-optimization flag has no effect and is deprecated")
return nil, nil
},
@@ -276,7 +276,7 @@ var cmdLineOpts = []cmdLineOpt{{
updateWithValue: nil,
updateNoValue: func(o options) (options, error) { o.noEtcHosts = true; return o, nil },
effect: func(_ options, _ string) (f effect, err error) {
log.Info(
log.Println(
"warning: --no-etc-hosts flag is deprecated " +
"and will be removed in the future versions; " +
"set clients.runtime_sources.hosts and dns.hostsfile_enabled " +
+22 -5
View File
@@ -3,7 +3,7 @@
# This comment is used to simplify checking local copies of the script. Bump
# this number every time a significant change is made to this script.
#
# AdGuard-Project-Version: 18
# AdGuard-Project-Version: 19
verbose="${VERBOSE:-0}"
readonly verbose
@@ -34,7 +34,9 @@ set -f -u
#
# * Packages log and github.com/AdguardTeam/golibs/log are replaced by
# stdlib's new package log/slog and AdGuard's new utilities package
# github.com/AdguardTeam/golibs/logutil/slogutil.
# github.com/AdguardTeam/golibs/logutil/slogutil. The exceptions are
# packages home, dhcpd, and aghos, where package log is used before the
# main logger is configured.
#
# * Package github.com/prometheus/client_golang/prometheus/promauto is not
# recommended, as it encourages reliance on global state.
@@ -56,8 +58,9 @@ set -f -u
# * Package unsafe is… unsafe.
#
# Currently, the only standard exception are files generated from protobuf
# schemas, which use package reflect. If your project needs more exceptions,
# add and document them.
# schemas, which use package reflect. Additionally, some packages are allowed
# to use package log, see above. If your project needs more exceptions, add and
# document them.
#
# NOTE: Flag -H for grep is non-POSIX but all of Busybox, GNU, macOS, and
# OpenBSD support it.
@@ -86,13 +89,27 @@ blocklist_imports() {
'-e' "$import_or_tab"'"golang.org/x/exp/slices"$' \
'-e' "$import_or_tab"'"golang.org/x/net/context"$' \
'-e' "$import_or_tab"'"io/ioutil"$' \
'-e' "$import_or_tab"'"log"$' \
'-e' "$import_or_tab"'"reflect"$' \
'-e' "$import_or_tab"'"sort"$' \
'-e' "$import_or_tab"'"unsafe"$' \
'-n' \
'{}' \
';'
# Package home is allowed to use package log, see the comment above.
find_with_ignore \
-type 'f' \
-name '*.go' \
'!' '(' \
-path './internal/home/*' \
')' \
-exec \
'grep' \
'-H' \
'-e' "$import_or_tab"'"log"$' \
'-n' \
'{}' \
';'
}
# method_const is a simple check against the usage of some raw strings and