mirror of
https://github.com/fhmq/hmq.git
synced 2026-04-22 09:48:33 +00:00
#17 Enable use of MQTT broker as a library -> passing a logger reference to the broker instance
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
5
main.go
5
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
|
||||
|
||||
Reference in New Issue
Block a user