54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
package logger
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
// type OutputStream int
|
|
|
|
// const (
|
|
// OutputStreamNone OutputStream = iota
|
|
// OutputStreamStderr
|
|
// OutputStreamStdout
|
|
// )
|
|
|
|
type NewLoggerOpts struct {
|
|
Debug bool
|
|
OutputFile string
|
|
// OutputStream OutputStream
|
|
}
|
|
|
|
func New(ctx context.Context, opts NewLoggerOpts) (Logger, error) {
|
|
// TODO: pass output streams from opts
|
|
writers := []io.Writer{}
|
|
writers = append(writers, os.Stderr)
|
|
|
|
if opts.OutputFile != "" {
|
|
file, err := os.OpenFile(opts.OutputFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0777)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
writers = append(writers, file)
|
|
}
|
|
|
|
// TODO: more log levels
|
|
level := zerolog.TraceLevel
|
|
if opts.Debug {
|
|
level = zerolog.DebugLevel
|
|
}
|
|
|
|
// TODO: move to wrapper, determine optimal buffer size
|
|
writer := io.MultiWriter(writers...)
|
|
wrapper := newWrapper(writer)
|
|
wrapper.FlushRoutine(ctx)
|
|
|
|
l := zerolog.New(wrapper).Level(level).With().Timestamp().Logger()
|
|
return &logger{
|
|
zeroLogger: &l,
|
|
}, nil
|
|
}
|