Skip to content
Snippets Groups Projects
Commit 31dfa603 authored by Wolfgang Welz's avatar Wolfgang Welz
Browse files

fix: integrate autopeering logging into global logger

parent 54ddd379
Branches
Tags
No related merge requests found
package logger
import (
"encoding/json"
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// NewLogger creates a logger with the supplied configuration.
func NewLogger(configJSON string, levelOverride string, opts ...zap.Option) *zap.SugaredLogger {
var loggingCfg zap.Config
if err := json.Unmarshal([]byte(configJSON), &loggingCfg); err != nil {
return newFallbackLogger(err, levelOverride, opts...)
}
if len(levelOverride) > 0 {
if level, err := levelFromString(levelOverride); err == nil {
loggingCfg.Level = zap.NewAtomicLevelAt(*level)
}
}
logger, err := loggingCfg.Build(opts...)
if err != nil {
return newFallbackLogger(err, levelOverride, opts...)
}
logger.Info("Successfully created the logger.")
logger.Sugar().Infof("Logging level set to %v", loggingCfg.Level)
return logger.Sugar()
}
func levelFromString(level string) (*zapcore.Level, error) {
var zapLevel zapcore.Level
if err := zapLevel.UnmarshalText([]byte(level)); err != nil {
return nil, fmt.Errorf("invalid logging level: %v", level)
}
return &zapLevel, nil
}
func newFallbackLogger(cause error, levelOverride string, opts ...zap.Option) *zap.SugaredLogger {
loggingCfg := zap.NewProductionConfig()
if len(levelOverride) > 0 {
if level, err := levelFromString(levelOverride); err == nil {
loggingCfg.Level = zap.NewAtomicLevelAt(*level)
}
}
logger, err := loggingCfg.Build(opts...)
if err != nil {
panic(err)
}
logger = logger.Named("fallback-logger")
logger.Warn("Failed to create logger, using fallback:", zap.Error(cause))
logger.Sugar().Infof("Logging level set to %v", loggingCfg.Level)
return logger.Sugar()
}
...@@ -7,7 +7,6 @@ import ( ...@@ -7,7 +7,6 @@ import (
"strings" "strings"
"github.com/iotaledger/goshimmer/packages/autopeering/discover" "github.com/iotaledger/goshimmer/packages/autopeering/discover"
"github.com/iotaledger/goshimmer/packages/autopeering/logger"
"github.com/iotaledger/goshimmer/packages/autopeering/peer" "github.com/iotaledger/goshimmer/packages/autopeering/peer"
"github.com/iotaledger/goshimmer/packages/autopeering/peer/service" "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
"github.com/iotaledger/goshimmer/packages/autopeering/selection" "github.com/iotaledger/goshimmer/packages/autopeering/selection"
...@@ -15,6 +14,7 @@ import ( ...@@ -15,6 +14,7 @@ import (
"github.com/iotaledger/goshimmer/packages/autopeering/transport" "github.com/iotaledger/goshimmer/packages/autopeering/transport"
"github.com/iotaledger/goshimmer/packages/parameter" "github.com/iotaledger/goshimmer/packages/parameter"
"github.com/iotaledger/goshimmer/plugins/autopeering/local" "github.com/iotaledger/goshimmer/plugins/autopeering/local"
"github.com/iotaledger/hive.go/logger"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
...@@ -23,30 +23,9 @@ var ( ...@@ -23,30 +23,9 @@ var (
Discovery *discover.Protocol Discovery *discover.Protocol
// Selection is the peer selection protocol. // Selection is the peer selection protocol.
Selection *selection.Protocol Selection *selection.Protocol
)
const defaultZLC = `{
"level": "info",
"development": false,
"outputPaths": ["./autopeering.log"],
"errorOutputPaths": ["stderr"],
"encoding": "console",
"encoderConfig": {
"timeKey": "ts",
"levelKey": "level",
"nameKey": "logger",
"callerKey": "caller",
"messageKey": "msg",
"stacktraceKey": "stacktrace",
"lineEnding": "",
"levelEncoder": "",
"timeEncoder": "iso8601",
"durationEncoder": "",
"callerEncoder": ""
}
}`
var zLogger = logger.NewLogger(defaultZLC, logLevel) log *logger.Logger
)
func configureAP() { func configureAP() {
masterPeers, err := parseEntryNodes() masterPeers, err := parseEntryNodes()
...@@ -56,13 +35,13 @@ func configureAP() { ...@@ -56,13 +35,13 @@ func configureAP() {
log.Debugf("Master peers: %v", masterPeers) log.Debugf("Master peers: %v", masterPeers)
Discovery = discover.New(local.GetInstance(), discover.Config{ Discovery = discover.New(local.GetInstance(), discover.Config{
Log: zLogger.Named("disc"), Log: log.Named("disc"),
MasterPeers: masterPeers, MasterPeers: masterPeers,
}) })
if parameter.NodeConfig.GetBool(CFG_SELECTION) { if parameter.NodeConfig.GetBool(CFG_SELECTION) {
Selection = selection.New(local.GetInstance(), Discovery, selection.Config{ Selection = selection.New(local.GetInstance(), Discovery, selection.Config{
Log: zLogger.Named("sel"), Log: log.Named("sel"),
Param: &selection.Parameters{ Param: &selection.Parameters{
SaltLifetime: selection.DefaultSaltLifetime, SaltLifetime: selection.DefaultSaltLifetime,
RequiredService: []service.Key{service.GossipKey}, RequiredService: []service.Key{service.GossipKey},
...@@ -104,7 +83,7 @@ func start(shutdownSignal <-chan struct{}) { ...@@ -104,7 +83,7 @@ func start(shutdownSignal <-chan struct{}) {
} }
// start a server doing discovery and peering // start a server doing discovery and peering
srv := server.Listen(local.GetInstance(), trans, zLogger.Named("srv"), handlers...) srv := server.Listen(local.GetInstance(), trans, log.Named("srv"), handlers...)
defer srv.Close() defer srv.Close()
// start the discovery on that connection // start the discovery on that connection
......
...@@ -9,15 +9,10 @@ import ( ...@@ -9,15 +9,10 @@ import (
"github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/node"
) )
const ( const name = "Autopeering" // name of the plugin
name = "Autopeering" // name of the plugin
logLevel = "info"
)
var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run) var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run)
var log *logger.Logger
func configure(*node.Plugin) { func configure(*node.Plugin) {
log = logger.NewLogger(name) log = logger.NewLogger(name)
...@@ -26,7 +21,9 @@ func configure(*node.Plugin) { ...@@ -26,7 +21,9 @@ func configure(*node.Plugin) {
} }
func run(*node.Plugin) { func run(*node.Plugin) {
daemon.BackgroundWorker(name, start) if err := daemon.BackgroundWorker(name, start); err != nil {
log.Errorf("Failed to start as daemon: %s", err)
}
} }
func configureEvents() { func configureEvents() {
......
...@@ -44,7 +44,7 @@ func parseParameters() { ...@@ -44,7 +44,7 @@ func parseParameters() {
} }
} }
func LoadConfig(){ func LoadConfig() {
if err := parameter.FetchConfig(true); err != nil { if err := parameter.FetchConfig(true); err != nil {
panic(err) panic(err)
} }
......
...@@ -5,7 +5,6 @@ import ( ...@@ -5,7 +5,6 @@ import (
"net" "net"
"strconv" "strconv"
"github.com/iotaledger/goshimmer/packages/autopeering/logger"
"github.com/iotaledger/goshimmer/packages/autopeering/peer/service" "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
"github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/errors"
gp "github.com/iotaledger/goshimmer/packages/gossip" gp "github.com/iotaledger/goshimmer/packages/gossip"
...@@ -13,36 +12,15 @@ import ( ...@@ -13,36 +12,15 @@ import (
"github.com/iotaledger/goshimmer/packages/parameter" "github.com/iotaledger/goshimmer/packages/parameter"
"github.com/iotaledger/goshimmer/plugins/autopeering/local" "github.com/iotaledger/goshimmer/plugins/autopeering/local"
"github.com/iotaledger/goshimmer/plugins/tangle" "github.com/iotaledger/goshimmer/plugins/tangle"
"github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/hive.go/typeutils"
) )
var ( var (
log *logger.Logger
mgr *gp.Manager mgr *gp.Manager
) )
const defaultZLC = `{
"level": "info",
"development": false,
"outputPaths": ["./gossip.log"],
"errorOutputPaths": ["stderr"],
"encoding": "console",
"encoderConfig": {
"timeKey": "ts",
"levelKey": "level",
"nameKey": "logger",
"callerKey": "caller",
"messageKey": "msg",
"stacktraceKey": "stacktrace",
"lineEnding": "",
"levelEncoder": "",
"timeEncoder": "iso8601",
"durationEncoder": "",
"callerEncoder": ""
}
}`
var zLogger = logger.NewLogger(defaultZLC, logLevel)
func configureGossip() { func configureGossip() {
lPeer := local.GetInstance() lPeer := local.GetInstance()
...@@ -57,13 +35,13 @@ func configureGossip() { ...@@ -57,13 +35,13 @@ func configureGossip() {
log.Fatalf("could not update services: %v", err) log.Fatalf("could not update services: %v", err)
} }
mgr = gp.NewManager(lPeer, getTransaction, zLogger) mgr = gp.NewManager(lPeer, getTransaction, log)
} }
func start(shutdownSignal <-chan struct{}) { func start(shutdownSignal <-chan struct{}) {
defer log.Info("Stopping Gossip ... done") defer log.Info("Stopping Gossip ... done")
srv, err := server.ListenTCP(local.GetInstance(), zLogger) srv, err := server.ListenTCP(local.GetInstance(), log)
if err != nil { if err != nil {
log.Fatalf("ListenTCP: %v", err) log.Fatalf("ListenTCP: %v", err)
} }
......
...@@ -13,23 +13,21 @@ import ( ...@@ -13,23 +13,21 @@ import (
"github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/hive.go/typeutils"
) )
const ( const name = "Gossip" // name of the plugin
name = "Gossip" // name of the plugin
logLevel = "info"
)
var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run) var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run)
var log *logger.Logger
func configure(*node.Plugin) { func configure(*node.Plugin) {
log = logger.NewLogger(name) log = logger.NewLogger(name)
configureGossip() configureGossip()
configureEvents() configureEvents()
} }
func run(*node.Plugin) { func run(*node.Plugin) {
daemon.BackgroundWorker(name, start) if err := daemon.BackgroundWorker(name, start); err != nil {
log.Errorf("Failed to start as daemon: %s", err)
}
} }
func configureEvents() { func configureEvents() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment