core/dbcommon/gormlog.go
package dbcommon
import (
"github.com/synapsecns/sanguine/core"
goLog "log"
"os"
"time"
"github.com/ipfs/go-log"
"go.uber.org/zap/zapcore"
gormLogger "gorm.io/gorm/logger"
)
// GetGormLogger gets a gorm logger at the correct level
// TODO investigate https://github.com/moul/zapgorm, we want to use the same write group.
// TODO: otel logging.
func GetGormLogger(zapLogger *log.ZapEventLogger) gormLogger.Interface {
// use a more performant logger in prod since we don't care about logging misses, etc
return gormLogger.New(
goLog.New(os.Stdout, "", goLog.LstdFlags),
gormLogger.Config{
SlowThreshold: 200 * time.Millisecond,
Colorful: true,
IgnoreRecordNotFoundError: zapLogger.Desugar().Core().Enabled(zapcore.DebugLevel),
LogLevel: getGormLogLevel(zapLogger),
},
)
}
// GetGormLogger converts the ipfs subsystem logger log level
// to a gorm level.
func getGormLogLevel(zapLogger *log.ZapEventLogger) gormLogger.LogLevel {
for _, level := range core.LogLevels {
if zapLogger.Desugar().Core().Enabled(level) {
switch level {
case zapcore.DebugLevel, zapcore.InfoLevel, zapcore.InvalidLevel:
return gormLogger.Info
case zapcore.WarnLevel:
return gormLogger.Warn
case zapcore.ErrorLevel:
return gormLogger.Error
case zapcore.DPanicLevel, zapcore.PanicLevel, zapcore.FatalLevel:
return gormLogger.Error
}
}
}
zapLogger.Warn("could not get gorm log level from ipfs logger")
// return info otherwise
return gormLogger.Warn
}