mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-12 16:12:44 +00:00
77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"github.com/go-errors/errors"
|
|
"github.com/phishingclub/phishingclub/config"
|
|
"github.com/phishingclub/phishingclub/log"
|
|
"github.com/phishingclub/phishingclub/version"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
const (
|
|
MODE_INTEGRATION_TEST = "integration_test"
|
|
MODE_DEVELOPMENT = "development"
|
|
MODE_PRODUCTION = "production"
|
|
)
|
|
|
|
func createCore(core zapcore.Core) zapcore.Core {
|
|
return &stackCore{core}
|
|
}
|
|
|
|
type stackCore struct {
|
|
zapcore.Core
|
|
}
|
|
|
|
func (c *stackCore) Check(ent zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
|
|
// dont add our core again if it's already been added
|
|
if ce != nil {
|
|
return ce
|
|
}
|
|
return ce.AddCore(ent, c)
|
|
}
|
|
|
|
func (c *stackCore) Write(ent zapcore.Entry, fields []zapcore.Field) error {
|
|
// return c.Core.Write(ent, fields)
|
|
// look for error field and enhance the message with stack trace
|
|
for _, field := range fields {
|
|
if field.Key == "error" {
|
|
if err, ok := field.Interface.(error); ok {
|
|
if goErr, ok := err.(*errors.Error); ok {
|
|
ent.Stack = goErr.ErrorStack()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return c.Core.Write(ent, fields)
|
|
}
|
|
|
|
func SetupLogger(loggerType string, conf *config.Config) (*zap.SugaredLogger, *zap.AtomicLevel, error) {
|
|
var logger *zap.Logger
|
|
var loggerAtom *zap.AtomicLevel
|
|
var err error
|
|
|
|
switch loggerType {
|
|
case MODE_DEVELOPMENT:
|
|
logger, loggerAtom, err = log.NewDevelopmentLogger(conf)
|
|
case MODE_INTEGRATION_TEST:
|
|
fallthrough
|
|
case MODE_PRODUCTION:
|
|
fallthrough
|
|
default:
|
|
logger, loggerAtom, err = log.NewProductionLogger(conf)
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
// Create new logger with custom core
|
|
logger = zap.New(createCore(logger.Core()))
|
|
sgr := logger.Sugar()
|
|
if loggerType == MODE_PRODUCTION {
|
|
sgr = sgr.With("v-debug", version.Get())
|
|
}
|
|
return sgr, loggerAtom, nil
|
|
}
|