summaryrefslogtreecommitdiff
path: root/plugins/logger/zap_logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/logger/zap_logger.go')
-rw-r--r--plugins/logger/zap_logger.go67
1 files changed, 24 insertions, 43 deletions
diff --git a/plugins/logger/zap_logger.go b/plugins/logger/zap_logger.go
index e1986da3..8c1739f2 100644
--- a/plugins/logger/zap_logger.go
+++ b/plugins/logger/zap_logger.go
@@ -4,7 +4,6 @@ import (
"github.com/spiral/endure"
"github.com/spiral/roadrunner/v2/plugins/config"
"go.uber.org/zap"
- "go.uber.org/zap/zapcore"
)
// ServiceName declares service name.
@@ -20,68 +19,50 @@ type LogFactory interface {
// ZapLogger manages zap logger.
type ZapLogger struct {
- base *zap.Logger
- cfg Config
+ base *zap.Logger
+ cfg Config
+ channels ChannelConfig
}
+// Init logger service.
func (z *ZapLogger) Init(cfg config.Provider) (err error) {
err = cfg.UnmarshalKey(ServiceName, &z.cfg)
if err != nil {
return err
}
- if z.base == nil {
- cfg := zap.Config{
- Level: zap.NewAtomicLevelAt(zap.DebugLevel),
- Encoding: "console",
- EncoderConfig: zapcore.EncoderConfig{
- MessageKey: "message",
- LevelKey: "level",
- TimeKey: "time",
- NameKey: "name",
- EncodeName: ColoredHashedNameEncoder,
- EncodeLevel: ColoredLevelEncoder,
- EncodeTime: UTCTimeEncoder,
- EncodeCaller: zapcore.ShortCallerEncoder,
- },
- OutputPaths: []string{"stderr"},
- ErrorOutputPaths: []string{"stderr"},
- }
-
- z.base, err = cfg.Build()
- if err != nil {
- return err
- }
+ err = cfg.UnmarshalKey(ServiceName, &z.channels)
+ if err != nil {
+ return err
}
- return nil
+ z.base, err = z.cfg.BuildLogger()
+ return err
+}
+
+// DefaultLogger returns default logger.
+func (z *ZapLogger) DefaultLogger() (*zap.Logger, error) {
+ return z.base, nil
}
-// GlobalLogger returns global log instance.
-func (z *ZapLogger) GlobalLogger() *zap.Logger {
- return z.base
+// NamedLogger returns logger dedicated to the specific channel. Similar to Named() but also reads the core params.
+func (z *ZapLogger) NamedLogger(name string) (*zap.Logger, error) {
+ if cfg, ok := z.channels.Channels[name]; ok {
+ return cfg.BuildLogger()
+ }
+
+ return z.base.Named(name), nil
}
// NamedLogger returns logger dedicated to the specific channel. Similar to Named() but also reads the core params.
-func (z *ZapLogger) NamedLogger(name string) *zap.Logger {
- // todo: automatically configure
- return z.base.Named(name)
+func (z *ZapLogger) ServiceLogger(n endure.Named) (*zap.Logger, error) {
+ return z.NamedLogger(n.Name())
}
// Provides declares factory methods.
func (z *ZapLogger) Provides() []interface{} {
return []interface{}{
z.DefaultLogger,
- z.AllocateLogger,
+ z.ServiceLogger,
}
}
-
-// AllocateLogger allocates logger for the service.
-func (z *ZapLogger) AllocateLogger(n endure.Named) (*zap.Logger, error) {
- return z.NamedLogger(n.Name()), nil
-}
-
-// DefaultLogger returns default logger.
-func (z *ZapLogger) DefaultLogger() (*zap.Logger, error) {
- return z.GlobalLogger(), nil
-}