From d52d8dda07cdbb96f5c4ebf70435157ca6fd6a92 Mon Sep 17 00:00:00 2001 From: Marc Magnin Date: Thu, 8 Feb 2018 11:13:50 +0100 Subject: [PATCH] #17 Enable use of MQTT broker as a library -> passing a logger reference to the broker instance --- broker/broker.go | 3 ++- logger/logger.go | 33 +++++++++++++++------------------ logger/logger_test.go | 12 ++++-------- main.go | 5 +++-- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/broker/broker.go b/broker/broker.go index 3045c8c..4e07175 100644 --- a/broker/broker.go +++ b/broker/broker.go @@ -47,7 +47,8 @@ type Broker struct { queues map[string]int } -func NewBroker(config *Config) (*Broker, error) { +func NewBroker(config *Config, logger *zap.Logger) (*Broker, error) { + log = logger b := &Broker{ id: GenUniqueId(), config: config, diff --git a/logger/logger.go b/logger/logger.go index d3c72e8..4bcfddd 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -8,43 +8,40 @@ import ( ) var ( - // env can be setup at build time with Go Linker. Value could be prod or whatever else for dev env - instance *zap.Logger - logCfg zap.Config + logInstance *zap.Logger ) -// NewDevLogger return a logger for dev builds -func NewDevLogger() (*zap.Logger, error) { +// InitDevLogger instanciate a logger for dev builds +func InitDevLogger() { logCfg := zap.NewDevelopmentConfig() - return logCfg.Build() + logInstance, _ = logCfg.Build() } -// NewProdLogger return a logger for production builds -func NewProdLogger() (*zap.Logger, error) { +// InitProdLogger instanciate a logger for production builds +func InitProdLogger() { logCfg := zap.NewProductionConfig() logCfg.DisableStacktrace = true logCfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel) - return logCfg.Build() + logInstance, _ = logCfg.Build() } func InitLogger(debug bool) { var err error - var log *zap.Logger if debug { - log, err = NewDevLogger() + InitDevLogger() } else { - log, err = NewProdLogger() + InitProdLogger() } if err != nil { panic("Unable to create a logger.") } - defer log.Sync() - - log.Debug("Logger initialization succeeded") - instance = log.Named("hmq") + logInstance.Debug("Logger initialization succeeded") } -// Get return a *zap.Logger instance +// Get the existing *zap.Logger instance. If none have been created, it'll instanciate de dev logger func Get() *zap.Logger { - return instance + if logInstance == nil { + InitDevLogger() + } + return logInstance } diff --git a/logger/logger_test.go b/logger/logger_test.go index c1291d4..d419133 100644 --- a/logger/logger_test.go +++ b/logger/logger_test.go @@ -19,15 +19,11 @@ func TestGet(t *testing.T) { } func TestNewDevLogger(t *testing.T) { - logger, err := NewDevLogger() - - assert.Nil(t, err) - assert.True(t, logger.Core().Enabled(zap.DebugLevel)) + InitDevLogger() + assert.True(t, Get().Core().Enabled(zap.DebugLevel)) } func TestNewProdLogger(t *testing.T) { - logger, err := NewProdLogger() - - assert.Nil(t, err) - assert.False(t, logger.Core().Enabled(zap.DebugLevel)) + InitProdLogger() + assert.False(t, Get().Core().Enabled(zap.DebugLevel)) } diff --git a/main.go b/main.go index 0062ff6..c4dd603 100644 --- a/main.go +++ b/main.go @@ -13,6 +13,7 @@ import ( "runtime" "github.com/fhmq/hmq/broker" + "github.com/fhmq/hmq/logger" ) func main() { @@ -22,8 +23,8 @@ func main() { fmt.Println("configure broker config error: ", err) return } - - b, err := broker.NewBroker(config) + logger.InitLogger(config.Debug) + b, err := broker.NewBroker(config, logger.Get()) if err != nil { fmt.Println("New Broker error: ", err) return