taler-mailbox

Service for asynchronous wallet-to-wallet payment messages
Log | Files | Refs | Submodules | README | LICENSE

commit 53b34f67a1ac6e48a3f4ae4d437915d9943d7b00
parent a39f02d9ed8442de50ce4b299d0cfd752309aff2
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Mon, 28 Apr 2025 10:56:13 +0200

add logging with levels

Diffstat:
Mcmd/mailbox-server/main.go | 24++++++++++++++++--------
Mpkg/rest/mailbox.go | 35++++++++++++++++++++++++++++++++---
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") }