Initial commit
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
mlog "github.com/micro/go-micro/util/log"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// Logger simply wraps the zerolog logger.
|
||||
type Logger struct {
|
||||
zerolog.Logger
|
||||
}
|
||||
|
||||
// NewLogger initializes a new logger instance.
|
||||
func NewLogger(opts ...Option) Logger {
|
||||
options := newOptions(opts...)
|
||||
|
||||
switch strings.ToLower(options.Level) {
|
||||
case "panic":
|
||||
zerolog.SetGlobalLevel(zerolog.PanicLevel)
|
||||
case "fatal":
|
||||
zerolog.SetGlobalLevel(zerolog.FatalLevel)
|
||||
case "error":
|
||||
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
|
||||
case "warn":
|
||||
zerolog.SetGlobalLevel(zerolog.WarnLevel)
|
||||
case "info":
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
case "debug":
|
||||
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||
default:
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
}
|
||||
|
||||
var logger zerolog.Logger
|
||||
|
||||
if options.Pretty {
|
||||
logger = log.Output(
|
||||
zerolog.NewConsoleWriter(
|
||||
func(w *zerolog.ConsoleWriter) {
|
||||
w.TimeFormat = time.RFC3339
|
||||
w.Out = os.Stderr
|
||||
w.NoColor = !options.Color
|
||||
},
|
||||
),
|
||||
)
|
||||
} else {
|
||||
logger = zerolog.New(os.Stderr)
|
||||
}
|
||||
|
||||
logger = logger.With().
|
||||
Str("service", options.Name).
|
||||
Timestamp().
|
||||
Logger()
|
||||
|
||||
mlog.SetLogger(
|
||||
logWrapper{
|
||||
logger,
|
||||
},
|
||||
)
|
||||
|
||||
return Logger{
|
||||
logger,
|
||||
}
|
||||
}
|
||||
|
||||
// logWrapper implements the required interface for the go-micro logger.
|
||||
type logWrapper struct {
|
||||
logger zerolog.Logger
|
||||
}
|
||||
|
||||
// Log makes use of github.com/go-log/log.Log
|
||||
func (w logWrapper) Log(v ...interface{}) {
|
||||
tmp := make([]string, len(v))
|
||||
|
||||
for _, row := range v {
|
||||
tmp = append(tmp, row.(string))
|
||||
}
|
||||
|
||||
w.logger.Info().Msg(strings.Join(tmp, " "))
|
||||
}
|
||||
|
||||
// Logf makes use of github.com/go-log/log.Logf
|
||||
func (w logWrapper) Logf(format string, v ...interface{}) {
|
||||
w.logger.Info().Msgf(strings.TrimRight(format, "\n"), v...)
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package log
|
||||
|
||||
// Option defines a single option function.
|
||||
type Option func(o *Options)
|
||||
|
||||
// Options defines the available options for this package.
|
||||
type Options struct {
|
||||
Name string
|
||||
Level string
|
||||
Pretty bool
|
||||
Color bool
|
||||
}
|
||||
|
||||
// newOptions initializes the available default options.
|
||||
func newOptions(opts ...Option) Options {
|
||||
opt := Options{
|
||||
Name: "ocis",
|
||||
Level: "info",
|
||||
Pretty: true,
|
||||
Color: true,
|
||||
}
|
||||
|
||||
for _, o := range opts {
|
||||
o(&opt)
|
||||
}
|
||||
|
||||
return opt
|
||||
}
|
||||
|
||||
// Name provides a function to set the name option.
|
||||
func Name(val string) Option {
|
||||
return func(o *Options) {
|
||||
o.Name = val
|
||||
}
|
||||
}
|
||||
|
||||
// Level provides a function to set the level option.
|
||||
func Level(val string) Option {
|
||||
return func(o *Options) {
|
||||
o.Level = val
|
||||
}
|
||||
}
|
||||
|
||||
// Pretty provides a function to set the pretty option.
|
||||
func Pretty(val bool) Option {
|
||||
return func(o *Options) {
|
||||
o.Pretty = val
|
||||
}
|
||||
}
|
||||
|
||||
// Color provides a function to set the color option.
|
||||
func Color(val bool) Option {
|
||||
return func(o *Options) {
|
||||
o.Color = val
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user