mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-19 08:01:16 +00:00
40 lines
828 B
Go
40 lines
828 B
Go
package worker
|
|
|
|
import (
|
|
"os"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
type LoggerClient struct {
|
|
Events chan zapcore.Entry
|
|
*zap.Logger
|
|
}
|
|
|
|
type CustomCore struct {
|
|
zapcore.Core
|
|
OnError func(entry zapcore.Entry)
|
|
}
|
|
|
|
func (c *CustomCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
|
|
if entry.Level == zapcore.ErrorLevel && c.OnError != nil {
|
|
c.OnError(entry)
|
|
}
|
|
return c.Core.Write(entry, fields)
|
|
}
|
|
|
|
func NewLoggerWithHandler(onError func(zapcore.Entry)) (*zap.Logger, error) {
|
|
cfg := zap.NewProductionConfig()
|
|
cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
core := zapcore.NewCore(
|
|
zapcore.NewJSONEncoder(cfg.EncoderConfig),
|
|
zapcore.AddSync(os.Stdout),
|
|
cfg.Level,
|
|
)
|
|
|
|
customCore := &CustomCore{Core: core, OnError: onError}
|
|
|
|
return zap.New(customCore, zap.AddCaller()), nil
|
|
}
|