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
}