#17 Enable use of MQTT broker as a library -> passing a logger reference to the broker instance

This commit is contained in:
Marc Magnin
2018-02-08 11:13:50 +01:00
parent 148dbbb23c
commit d52d8dda07
4 changed files with 24 additions and 29 deletions

View File

@@ -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,

View File

@@ -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
}

View File

@@ -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))
}

View File

@@ -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