door5/pkg/logger/log.go

64 lines
1.2 KiB
Go

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
}