parent
b66a165a75
commit
3b1b9bc0e0
@ -0,0 +1,10 @@
|
||||
.env
|
||||
|
||||
.DS_STORE
|
||||
|
||||
.task/
|
||||
|
||||
!.gitkeep
|
||||
|
||||
go.work
|
||||
go.work.sum
|
@ -1,114 +0,0 @@
|
||||
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
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package components
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/urfave/cli/v2"
|
||||
"go-micro.dev/v4/logger"
|
||||
)
|
||||
|
||||
func FilterDuplicateFlags(flags []cli.Flag) []cli.Flag {
|
||||
flagMap := make(map[string]cli.Flag, 0)
|
||||
|
||||
for _, f := range flags {
|
||||
if _, ok := flagMap[f.Names()[0]]; !ok {
|
||||
flagMap[f.Names()[0]] = f
|
||||
} else {
|
||||
logger.Warn(fmt.Sprintf("Duplicated flag '%s' found", f.Names()[0]))
|
||||
}
|
||||
}
|
||||
|
||||
result := make([]cli.Flag, len(flagMap))
|
||||
i := 0
|
||||
for _, f := range flagMap {
|
||||
result[i] = f
|
||||
i += 1
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
Loading…
Reference in New Issue