You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
components/components/logrus/logrus.go

115 lines
2.6 KiB
Go

package logrus
import (
"context"
"fmt"
"os"
"runtime"
"strings"
microLogrus "github.com/go-micro/plugins/v4/logger/logrus"
microLogger "go-micro.dev/v4/logger"
"go-micro.dev/v4/server"
"jochum.dev/jo-micro/components"
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
)
// caller returns string presentation of log caller which is formatted as
// `/path/to/file.go:line_number`. e.g. `/internal/app/api.go:25`
func caller() func(*runtime.Frame) (function string, file string) {
return func(f *runtime.Frame) (function string, file string) {
return "", fmt.Sprintf("%s:%d", f.File, f.Line)
}
}
const Name = "logrus"
type LogrusComponet struct {
initialized bool
logger *logrus.Logger
}
func New() *LogrusComponet {
return &LogrusComponet{initialized: false}
}
func Must(ctx context.Context) *LogrusComponet {
return components.Must(ctx).Must(Name).(*LogrusComponet)
}
func MustReg(cReg *components.Components) *LogrusComponet {
return cReg.Must(Name).(*LogrusComponet)
}
func (c *LogrusComponet) Name() string {
return Name
}
func (c *LogrusComponet) Priority() int {
return 0
}
func (c *LogrusComponet) Initialized() bool {
return c.initialized
}
func (c *LogrusComponet) Init(components *components.Components, cli *cli.Context) error {
if c.initialized {
return nil
}
lvl, err := logrus.ParseLevel(cli.String(fmt.Sprintf("%s_loglevel", strings.ToLower(components.FlagPrefix()))))
if err != nil {
return err
}
c.logger = logrus.New()
c.logger.Out = os.Stdout
c.logger.Level = lvl
c.logger.SetReportCaller(true)
c.logger.SetFormatter(&logrus.JSONFormatter{
CallerPrettyfier: caller(),
FieldMap: logrus.FieldMap{
logrus.FieldKeyFile: "caller",
},
})
microLogger.DefaultLogger = microLogrus.NewLogger(microLogrus.WithLogger(c.logger))
c.initialized = true
return nil
}
func (c *LogrusComponet) Stop() error {
c.initialized = false
c.logger = nil
return nil
}
func (c *LogrusComponet) Flags(r *components.Components, flags []cli.Flag) []cli.Flag {
return []cli.Flag{
&cli.StringFlag{
Name: fmt.Sprintf("%s_loglevel", strings.ToLower(r.FlagPrefix())),
Value: "info",
Usage: "Logrus log level default 'info', {panic,fatal,error,warn,info,debug,trace} available",
EnvVars: []string{fmt.Sprintf("%s_LOG_LEVEL", strings.ToUpper(r.FlagPrefix()))},
},
}
}
func (c *LogrusComponet) Health(context context.Context) error {
return nil
}
func (c *LogrusComponet) WrapHandlerFunc(ctx context.Context, req server.Request, rsp interface{}) error {
return nil
}
func (c *LogrusComponet) Logger() *logrus.Logger {
return c.logger
}