diff options
Diffstat (limited to 'plugins/logger/zap_logger.go')
-rw-r--r-- | plugins/logger/zap_logger.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/plugins/logger/zap_logger.go b/plugins/logger/zap_logger.go new file mode 100644 index 00000000..8c1739f2 --- /dev/null +++ b/plugins/logger/zap_logger.go @@ -0,0 +1,68 @@ +package logger + +import ( + "github.com/spiral/endure" + "github.com/spiral/roadrunner/v2/plugins/config" + "go.uber.org/zap" +) + +// ServiceName declares service name. +const ServiceName = "logs" + +type LogFactory interface { + // GlobalLogger returns global log instance. + GlobalLogger() *zap.Logger + + // NamedLogger returns logger dedicated to the specific channel. Similar to Named() but also reads the core params. + NamedLogger(name string) *zap.Logger +} + +// ZapLogger manages zap logger. +type ZapLogger struct { + 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 + } + + err = cfg.UnmarshalKey(ServiceName, &z.channels) + if err != nil { + return err + } + + z.base, err = z.cfg.BuildLogger() + return err +} + +// DefaultLogger returns default logger. +func (z *ZapLogger) DefaultLogger() (*zap.Logger, error) { + return z.base, 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, 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) 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.ServiceLogger, + } +} |