commit 53b34f67a1ac6e48a3f4ae4d437915d9943d7b00
parent a39f02d9ed8442de50ce4b299d0cfd752309aff2
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Mon, 28 Apr 2025 10:56:13 +0200
add logging with levels
Diffstat:
2 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/cmd/mailbox-server/main.go b/cmd/mailbox-server/main.go
@@ -34,7 +34,7 @@ import (
var (
m mailbox.Mailbox
- ltversion string
+ ltversion string
version string
mailboxdatahome string
verbose bool
@@ -56,7 +56,7 @@ func main() {
var cfgFlag = flag.String("c", "mailbox.conf", "Configuration file to use")
getopt.Alias("c", "config")
// FIXME use flags
- _ = flag.String("L", "INFO", "Log level to use. DEBUG, INFO, WARNING or ERROR")
+ loglevelStringOpt := flag.String("L", "INFO", "Log level to use. DEBUG, INFO, WARNING or ERROR")
getopt.Alias("L", "loglevel")
var verboseFlag = flag.Bool("v", false, "Verbose")
getopt.Alias("v", "verbose")
@@ -69,6 +69,12 @@ func main() {
return
}
verbose = *verboseFlag
+ loglevel := mailbox.LogInfo
+ for loglevelNum, loglevelString := range mailbox.LoglevelStringMap {
+ if loglevelString == *loglevelStringOpt {
+ loglevel = loglevelNum
+ }
+ }
m := mailbox.Mailbox{}
iniCfg, err := ini.Load(*cfgFlag)
if err != nil {
@@ -86,11 +92,13 @@ func main() {
merchToken := iniCfg.Section("mailbox").Key("merchant_token").MustString("secretAccessToken")
merch := merchant.NewMerchant(merchURL, merchToken)
m.Initialize(mailbox.MailboxConfig{
- LibtoolVersion: ltversion,
- Version: version,
- Datahome: mailboxdatahome,
- Db: db,
- Ini: iniCfg,
- Merchant: merch})
+ LibtoolVersion: ltversion,
+ Version: version,
+ Datahome: mailboxdatahome,
+ Db: db,
+ Ini: iniCfg,
+ Merchant: merch,
+ Loglevel: loglevel,
+ })
handleRequests(&m)
}
diff --git a/pkg/rest/mailbox.go b/pkg/rest/mailbox.go
@@ -46,12 +46,26 @@ import (
"taler.net/taler-mailbox/internal/util"
)
-type TalerMailboxBoxySize int
+type LogLevel int
+
+const (
+ LogError LogLevel = iota
+ LogWarning
+ LogInfo
+ LogDebug
+)
+
+var LoglevelStringMap = map[LogLevel]string{
+ LogDebug: "DEBUG",
+ LogError: "ERROR",
+ LogWarning: "WARN",
+ LogInfo: "INFO",
+}
type MailboxConfig struct {
// libtool-style representation of the Mailbox protocol version, see
- // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
- // The format is "current:revision:age".
+ // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
+ // The format is "current:revision:age".
LibtoolVersion string
// Version
@@ -68,6 +82,9 @@ type MailboxConfig struct {
// Merchant connection
Merchant merchant.Merchant
+
+ // Loglevel
+ Loglevel LogLevel
}
// Mailbox is the primary object of the Mailbox service
@@ -97,6 +114,9 @@ type Mailbox struct {
// How many messages will a single response
// contain at maximum.
MessageResponseLimit uint64
+
+ // Logger
+ Logger *log.Logger
}
// VersionResponse is the JSON response of the /config endpoint
@@ -425,9 +445,18 @@ func (m *Mailbox) setupHandlers() {
m.Router.HandleFunc("/{mailbox}", m.deleteMessagesResponse).Methods("DELETE")
}
+func (m *Mailbox) Logf(loglevel LogLevel, fmt string, args ...any) {
+ if loglevel < m.Cfg.Loglevel {
+ return
+ }
+ m.Logger.SetPrefix("taler-mailbox - " + LoglevelStringMap[loglevel] + " ")
+ m.Logger.Printf(fmt, args...)
+}
+
// Initialize the Mailbox instance with cfgfile
func (m *Mailbox) Initialize(cfg MailboxConfig) {
m.Cfg = cfg
+ m.Logger = log.New(os.Stdout, "taler-mailbox:", log.LstdFlags)
if cfg.Ini.Section("mailbox").Key("production").MustBool(false) {
fmt.Println("Production mode enabled")
}