Lutfi Khoirudin
Lutfi Khoirudin

Reputation: 15

Logging to stdout and to file if level of the log is Err with zerolog and GIN

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

Answers (0)

Related Questions