Skip to content

Instantly share code, notes, and snippets.

@mnabila
Created January 30, 2024 02:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mnabila/10fa102b212b06f32429d50ee4247314 to your computer and use it in GitHub Desktop.
Save mnabila/10fa102b212b06f32429d50ee4247314 to your computer and use it in GitHub Desktop.
zerolog output to different file by level error
package main
import (
"fmt"
"io"
"os"
"time"
"github.com/rs/zerolog"
)
type SpecificLevelWriter struct {
io.Writer
Levels []zerolog.Level
}
func (w SpecificLevelWriter) WriteLevel(level zerolog.Level, p []byte) (int, error) {
for _, l := range w.Levels {
if l == level {
return w.Write(p)
}
}
return len(p), nil
}
func CreateLogger() zerolog.Logger {
ifile, _ := os.OpenFile(fmt.Sprintf("%s-info.log", time.Now().Format("2006-01-02")), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
efile, _ := os.OpenFile(fmt.Sprintf("%s-error.log", time.Now().Format("2006-01-02")), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
writer := zerolog.MultiLevelWriter(
SpecificLevelWriter{
Writer: ifile,
Levels: []zerolog.Level{
zerolog.DebugLevel, zerolog.InfoLevel, zerolog.WarnLevel,
},
},
SpecificLevelWriter{
Writer: efile,
Levels: []zerolog.Level{
zerolog.ErrorLevel, zerolog.FatalLevel, zerolog.PanicLevel,
},
},
)
return zerolog.New(writer).With().Timestamp().Logger()
}
func main() {
l := CreateLogger()
l.Debug().Msg("debugnya masuk ke info.log")
l.Info().Msg("infonya masuk ke info.log")
l.Error().Msg("error masuk ke error.log")
l.Fatal().Msg("fatal masuk ke error.log")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment