64 lines
1.2 KiB
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
|
|
}
|