Reputation: 15
I want to set the default logger GIN is using zerolog and print to the os.Stdout, but when log level is error it should print it to a file
in func main.go
func main() {
zerolog.TimeFieldFormat = "02-01-2006 15:04:05"
zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
zerolog.SetGlobalLevel(zerolog.InfoLevel)
r := gin.Default()
r.Use(logger.SetLogger(
logger.WithLogger(func(ctx *gin.Context, l zerolog.Logger) zerolog.Logger {
if l.GetLevel() == zerolog.ErrorLevel {
return l.Output(file).With().Caller().Logger()
}
return l.Output(os.Stdout).With().Caller().Logger()
}),
))
...
}
then when routing I pass &log.Logger
func GetTasks(ctx *gin.Context, db *sql.DB, log *zerolog.Logger) {
statement, err := db.Prepare("SELECT * FROM tasks ORDER BY id ASC")
log.Error().Err(errors.New("halo....")).Msg("")
// I expecting that the code above will print the error to file
...
}
Upvotes: 1
Views: 203