woj-server/internal/misc/log/zap.go

88 lines
1.9 KiB
Go
Raw Permalink Normal View History

2023-07-15 16:19:49 +08:00
package log
import (
2023-12-20 23:45:53 +08:00
"git.0x7f.app/WOJ/woj-server/cmd"
2023-07-15 16:19:49 +08:00
"git.0x7f.app/WOJ/woj-server/internal/misc/config"
"git.0x7f.app/WOJ/woj-server/pkg/utils"
2023-07-20 11:39:14 +08:00
"github.com/TheZeroSlave/zapsentry"
"github.com/getsentry/sentry-go"
2023-07-15 16:19:49 +08:00
"github.com/samber/do"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"log"
)
var _ Service = (*service)(nil)
type Service interface {
GetRawLogger() *zap.Logger
GetLogger(domain string) *zap.Logger
HealthCheck() error
}
func NewService(i *do.Injector) (Service, error) {
srv := &service{}
2024-02-15 12:47:57 +08:00
c := do.MustInvoke[config.Service](i).GetConfig()
2023-07-15 16:19:49 +08:00
cfg := zap.Config{
Level: zap.NewAtomicLevelAt(utils.If(
c.Development,
zapcore.DebugLevel,
zapcore.InfoLevel,
)),
Development: c.Development,
Encoding: "console", // or json
EncoderConfig: utils.If(
c.Development,
zap.NewDevelopmentEncoderConfig(),
zap.NewProductionEncoderConfig(),
),
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
}
var err error
srv.logger, err = cfg.Build()
if err != nil {
log.Printf("Failed to setup Zap: %s\n", err.Error())
return nil, err
}
2023-12-20 23:45:53 +08:00
if cmd.SentryDSN != "" {
srv.logger = attachSentry(srv.logger)
}
2023-07-20 11:39:14 +08:00
2023-07-15 16:19:49 +08:00
return srv, nil
}
2023-07-20 11:39:14 +08:00
func attachSentry(log *zap.Logger) *zap.Logger {
cfg := zapsentry.Configuration{
2024-02-19 12:17:52 +08:00
Level: zapcore.DPanicLevel,
2023-07-20 11:39:14 +08:00
EnableBreadcrumbs: true,
2024-02-19 12:17:52 +08:00
BreadcrumbLevel: zapcore.DebugLevel,
2023-07-20 11:39:14 +08:00
}
core, err := zapsentry.NewCore(cfg, zapsentry.NewSentryClientFromClient(sentry.CurrentHub().Client()))
if err != nil {
log.Warn("failed to init zap", zap.Error(err))
return log
}
log = zapsentry.AttachCoreToLogger(core, log)
return log.With(zapsentry.NewScope())
}
2024-02-15 12:47:57 +08:00
type service struct{ logger *zap.Logger }
2023-07-15 16:19:49 +08:00
func (s *service) GetRawLogger() *zap.Logger {
return s.logger
}
func (s *service) GetLogger(domain string) *zap.Logger {
return s.logger.Named(domain)
}
func (s *service) HealthCheck() error {
return nil
}