package logger import ( "io" "os" "path/filepath" "runtime" "sync" "git.tcp.direct/kayos/zwrap" "github.com/rs/zerolog" ) var ( logger zerolog.Logger setupOnce = &sync.Once{} ) func Get() *zwrap.Logger { setupOnce.Do(func() { if err := Setup("", zerolog.TraceLevel); err != nil { println(err.Error()) os.Exit(1) } }) return zwrap.Wrap(logger) } //goland:noinspection GoBoolExpressions func consoleWriter() zerolog.ConsoleWriter { return zerolog.ConsoleWriter{ Out: os.Stdout, NoColor: runtime.GOOS == "windows", } } func fileWriter(path string) (io.Writer, error) { if path == "" { return io.Discard, nil } var err error if err = os.MkdirAll(path, 0755); err != nil { return nil, err } var f *os.File if f, err = os.OpenFile(filepath.Join(path, "door5.log"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil { return nil, err } return f, nil } func Setup(path string, level zerolog.Level) error { var err error var fw io.Writer if fw, err = fileWriter(path); err != nil { return err } cw := consoleWriter() mw := zerolog.MultiLevelWriter(cw, fw) logger = zerolog.New(mw).With().Timestamp().Logger().Level(level) return nil }