feat: respect pvr exclusions (#37)
This commit is contained in:
@@ -1,19 +1,55 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func New(verbosity string) zerolog.Logger {
|
||||
if verbosity == "" {
|
||||
return log.Logger
|
||||
}
|
||||
|
||||
level, err := zerolog.ParseLevel(verbosity)
|
||||
if err != nil {
|
||||
return log.Logger
|
||||
}
|
||||
|
||||
return log.Level(level)
|
||||
type logger struct {
|
||||
log zerolog.Logger
|
||||
writers []io.Writer
|
||||
verbosity int
|
||||
}
|
||||
|
||||
func Init(opts ...InitOption) zerolog.Logger {
|
||||
// prepare logger
|
||||
l := &logger{
|
||||
writers: make([]io.Writer, 0),
|
||||
verbosity: 0,
|
||||
}
|
||||
|
||||
// loop options
|
||||
for _, opt := range opts {
|
||||
opt(l)
|
||||
}
|
||||
|
||||
// set logger
|
||||
l.log = log.Output(io.MultiWriter(l.writers...))
|
||||
|
||||
// set global logger
|
||||
switch {
|
||||
case l.verbosity == 1:
|
||||
log.Logger = l.log.Level(zerolog.DebugLevel)
|
||||
case l.verbosity > 1:
|
||||
log.Logger = l.log.Level(zerolog.TraceLevel)
|
||||
default:
|
||||
log.Logger = l.log.Level(zerolog.InfoLevel)
|
||||
}
|
||||
|
||||
return log.Logger
|
||||
}
|
||||
|
||||
func Child(opts ...ChildOption) zerolog.Logger {
|
||||
// default
|
||||
l := log.With().
|
||||
Logger()
|
||||
|
||||
// loop options
|
||||
for _, opt := range opts {
|
||||
opt(&l)
|
||||
}
|
||||
|
||||
return l
|
||||
}
|
||||
|
||||
70
logger/options.go
Normal file
70
logger/options.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/natefinch/lumberjack"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
/* core logger options */
|
||||
|
||||
type InitOption func(*logger)
|
||||
|
||||
func WithConsole() InitOption {
|
||||
return func(l *logger) {
|
||||
l.writers = append(l.writers, zerolog.ConsoleWriter{
|
||||
TimeFormat: time.Stamp,
|
||||
Out: os.Stderr,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func WithFile(filepath string) InitOption {
|
||||
return func(l *logger) {
|
||||
l.writers = append(l.writers, zerolog.ConsoleWriter{
|
||||
TimeFormat: time.Stamp,
|
||||
Out: &lumberjack.Logger{
|
||||
Filename: filepath,
|
||||
MaxSize: 5,
|
||||
MaxAge: 14,
|
||||
MaxBackups: 5,
|
||||
},
|
||||
NoColor: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func WithVerbosity(verbosity int) InitOption {
|
||||
return func(l *logger) {
|
||||
l.verbosity = verbosity
|
||||
}
|
||||
}
|
||||
|
||||
/* child logger options */
|
||||
|
||||
type ChildOption func(*zerolog.Logger)
|
||||
|
||||
func WithName(name string) ChildOption {
|
||||
return func(l *zerolog.Logger) {
|
||||
*l = l.With().
|
||||
Str("caller", name).
|
||||
Logger()
|
||||
}
|
||||
}
|
||||
|
||||
func WithLevel(level string) ChildOption {
|
||||
return func(l *zerolog.Logger) {
|
||||
if level == "" {
|
||||
return
|
||||
}
|
||||
|
||||
zl, err := zerolog.ParseLevel(level)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
*l = l.Level(zl)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user