diff --git a/dmarcdb/dmarcdb.go b/dmarcdb/dmarcdb.go index 6d073d3..44244fe 100644 --- a/dmarcdb/dmarcdb.go +++ b/dmarcdb/dmarcdb.go @@ -21,6 +21,7 @@ import ( "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" + "github.com/mjl-/mox/moxvar" ) // Init opens the databases. @@ -64,13 +65,13 @@ func Close() error { func openReportsDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) { p := mox.DataDirPath("dmarcrpt.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)} return bstore.Open(ctx, p, &opts, ReportsDBTypes...) } func openEvalDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) { p := mox.DataDirPath("dmarceval.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)} return bstore.Open(ctx, p, &opts, EvalDBTypes...) } diff --git a/junk/filter.go b/junk/filter.go index af2d9bf..9093367 100644 --- a/junk/filter.go +++ b/junk/filter.go @@ -26,6 +26,7 @@ import ( "github.com/mjl-/mox/message" "github.com/mjl-/mox/mlog" + "github.com/mjl-/mox/moxvar" ) var ( @@ -230,7 +231,7 @@ func newDB(ctx context.Context, log mlog.Log, path string) (db *bstore.DB, rerr } }() - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(path, log.Logger)} db, err := bstore.Open(ctx, path, &opts, DBTypes...) if err != nil { return nil, fmt.Errorf("open new database: %w", err) diff --git a/moxvar/reglog.go b/moxvar/reglog.go new file mode 100644 index 0000000..1de0d34 --- /dev/null +++ b/moxvar/reglog.go @@ -0,0 +1,26 @@ +package moxvar + +import ( + "errors" + "io/fs" + "log/slog" + "os" + "testing" +) + +var skipRegisterLogging = testing.Testing() + +// RegisterLogger should be used as parameter to bstore.Options.RegisterLogger. +// +// RegisterLogger returns nil when running under test and the database file does +// not yet exist to reduce lots of unhelpful logging, and returns logger log +// otherwise. +func RegisterLogger(path string, log *slog.Logger) *slog.Logger { + if !skipRegisterLogging { + return log + } + if _, err := os.Stat(path); err != nil && errors.Is(err, fs.ErrNotExist) { + return nil + } + return log +} diff --git a/mtastsdb/db.go b/mtastsdb/db.go index 928d8d7..0c0a65b 100644 --- a/mtastsdb/db.go +++ b/mtastsdb/db.go @@ -24,6 +24,7 @@ import ( "github.com/mjl-/mox/dns" "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" + "github.com/mjl-/mox/moxvar" "github.com/mjl-/mox/mtasts" "github.com/mjl-/mox/tlsrpt" ) @@ -75,7 +76,7 @@ func Init(refresher bool) error { p := mox.DataDirPath("mtasts.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)} var err error DB, err = bstore.Open(mox.Shutdown, p, &opts, DBTypes...) if err != nil { diff --git a/queue/queue.go b/queue/queue.go index 2fabc25..e2e722e 100644 --- a/queue/queue.go +++ b/queue/queue.go @@ -32,6 +32,7 @@ import ( "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" "github.com/mjl-/mox/moxio" + "github.com/mjl-/mox/moxvar" "github.com/mjl-/mox/smtp" "github.com/mjl-/mox/smtpclient" "github.com/mjl-/mox/store" @@ -351,7 +352,7 @@ func Init() error { var err error log := mlog.New("queue", nil) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(qpath, log.Logger)} DB, err = bstore.Open(mox.Shutdown, qpath, &opts, DBTypes...) if err == nil { err = DB.Read(mox.Shutdown, func(tx *bstore.Tx) error { diff --git a/store/account.go b/store/account.go index c0cd9c9..4958197 100644 --- a/store/account.go +++ b/store/account.go @@ -57,6 +57,7 @@ import ( "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" "github.com/mjl-/mox/moxio" + "github.com/mjl-/mox/moxvar" "github.com/mjl-/mox/publicsuffix" "github.com/mjl-/mox/scram" "github.com/mjl-/mox/smtp" @@ -918,7 +919,7 @@ func OpenAccountDB(log mlog.Log, accountDir, accountName string) (a *Account, re os.MkdirAll(accountDir, 0770) } - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(dbpath, log.Logger)} db, err := bstore.Open(context.TODO(), dbpath, &opts, DBTypes...) if err != nil { return nil, err diff --git a/store/tlspubkey.go b/store/tlspubkey.go index 3d66183..146f7ff 100644 --- a/store/tlspubkey.go +++ b/store/tlspubkey.go @@ -18,6 +18,7 @@ import ( "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" + "github.com/mjl-/mox/moxvar" "github.com/mjl-/mox/smtp" ) @@ -54,7 +55,7 @@ func Init(ctx context.Context) error { pkglog := mlog.New("store", nil) p := mox.DataDirPath("auth.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: pkglog.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, pkglog.Logger)} var err error AuthDB, err = bstore.Open(ctx, p, &opts, AuthDBTypes...) return err diff --git a/tlsrptdb/db.go b/tlsrptdb/db.go index b2e22c9..6d25454 100644 --- a/tlsrptdb/db.go +++ b/tlsrptdb/db.go @@ -11,6 +11,7 @@ import ( "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/mox-" + "github.com/mjl-/mox/moxvar" ) var ( @@ -45,14 +46,14 @@ func Init() error { func openReportDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) { p := mox.DataDirPath("tlsrpt.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)} return bstore.Open(ctx, p, &opts, ReportDBTypes...) } func openResultDB(ctx context.Context, log mlog.Log) (*bstore.DB, error) { p := mox.DataDirPath("tlsrptresult.db") os.MkdirAll(filepath.Dir(p), 0770) - opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: log.Logger} + opts := bstore.Options{Timeout: 5 * time.Second, Perm: 0660, RegisterLogger: moxvar.RegisterLogger(p, log.Logger)} return bstore.Open(ctx, p, &opts, ResultDBTypes...) }