From 44bb6a0a264aafe7b9124a911093081845cd5533 Mon Sep 17 00:00:00 2001 From: "T.v.Dein" Date: Mon, 17 Feb 2025 13:46:41 +0100 Subject: [PATCH] add bolt logger interface with slog for debugging (#22) --- anydb.1 | 4 ++-- app/db.go | 11 ++++++++++- app/dbentry.pb.go | 16 ++++++++-------- common/logger.go | 23 +++++++++++++++++++++++ 4 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 common/logger.go diff --git a/anydb.1 b/anydb.1 index c9345a1..280e9d4 100644 --- a/anydb.1 +++ b/anydb.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "ANYDB 1" -.TH ANYDB 1 "2025-02-10" "1" "User Commands" +.TH ANYDB 1 "2025-02-11" "1" "User Commands" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/app/db.go b/app/db.go index 7423c6f..9546ccf 100644 --- a/app/db.go +++ b/app/db.go @@ -27,6 +27,8 @@ import ( "strings" "time" + common "github.com/tlinden/anydb/common" + bolt "go.etcd.io/bbolt" "google.golang.org/protobuf/proto" timestamppb "google.golang.org/protobuf/types/known/timestamppb" @@ -93,7 +95,14 @@ func (db *DB) Open() error { } } - b, err := bolt.Open(db.Dbfile, 0600, nil) + var opts *bolt.Options + + if db.Debug { + log := common.Slogger{Logger: slog.Default()} + opts = &bolt.Options{Logger: log} + } + + b, err := bolt.Open(db.Dbfile, 0600, opts) if err != nil { return fmt.Errorf("failed to open DB %s: %w", db.Dbfile, err) } diff --git a/app/dbentry.pb.go b/app/dbentry.pb.go index 8e256eb..6bf1417 100644 --- a/app/dbentry.pb.go +++ b/app/dbentry.pb.go @@ -2,8 +2,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.1 -// protoc v3.21.12 +// protoc-gen-go v1.36.5 +// protoc v4.24.4 // source: app/dbentry.proto package app @@ -14,6 +14,7 @@ import ( timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -133,7 +134,7 @@ func (x *DbEntry) GetValue() string { var File_app_dbentry_proto protoreflect.FileDescriptor -var file_app_dbentry_proto_rawDesc = []byte{ +var file_app_dbentry_proto_rawDesc = string([]byte{ 0x0a, 0x11, 0x61, 0x70, 0x70, 0x2f, 0x64, 0x62, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x70, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, @@ -156,16 +157,16 @@ var file_app_dbentry_proto_rawDesc = []byte{ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x6c, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x2f, 0x61, 0x6e, 0x79, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_app_dbentry_proto_rawDescOnce sync.Once - file_app_dbentry_proto_rawDescData = file_app_dbentry_proto_rawDesc + file_app_dbentry_proto_rawDescData []byte ) func file_app_dbentry_proto_rawDescGZIP() []byte { file_app_dbentry_proto_rawDescOnce.Do(func() { - file_app_dbentry_proto_rawDescData = protoimpl.X.CompressGZIP(file_app_dbentry_proto_rawDescData) + file_app_dbentry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_app_dbentry_proto_rawDesc), len(file_app_dbentry_proto_rawDesc))) }) return file_app_dbentry_proto_rawDescData } @@ -193,7 +194,7 @@ func file_app_dbentry_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_app_dbentry_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_app_dbentry_proto_rawDesc), len(file_app_dbentry_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -204,7 +205,6 @@ func file_app_dbentry_proto_init() { MessageInfos: file_app_dbentry_proto_msgTypes, }.Build() File_app_dbentry_proto = out.File - file_app_dbentry_proto_rawDesc = nil file_app_dbentry_proto_goTypes = nil file_app_dbentry_proto_depIdxs = nil } diff --git a/common/logger.go b/common/logger.go new file mode 100644 index 0000000..b11fef6 --- /dev/null +++ b/common/logger.go @@ -0,0 +1,23 @@ +package common + +import ( + "fmt" + "log/slog" +) + +type Slogger struct { + *slog.Logger +} + +func (l Slogger) Debug(v ...interface{}) {} +func (l Slogger) Debugf(format string, v ...interface{}) { l.Logger.Debug(fmt.Sprintf(format, v...)) } +func (l Slogger) Error(v ...interface{}) {} +func (l Slogger) Errorf(format string, v ...interface{}) { l.Logger.Error(fmt.Sprintf(format, v...)) } +func (l Slogger) Info(v ...interface{}) {} +func (l Slogger) Infof(format string, v ...interface{}) { l.Logger.Info(fmt.Sprintf(format, v...)) } +func (l Slogger) Warning(v ...interface{}) {} +func (l Slogger) Warningf(format string, v ...interface{}) { l.Logger.Warn(fmt.Sprintf(format, v...)) } +func (l Slogger) Fatal(v ...interface{}) {} +func (l Slogger) Fatalf(format string, v ...interface{}) { l.Logger.Error(fmt.Sprintf(format, v...)) } +func (l Slogger) Panic(v ...interface{}) {} +func (l Slogger) Panicf(format string, v ...interface{}) { l.Logger.Error(fmt.Sprintf(format, v...)) }