From 179009fec413b8f77f0920b93661d44787fd7212 Mon Sep 17 00:00:00 2001 From: Diaa Sami Date: Fri, 24 Sep 2021 15:17:21 +0200 Subject: [PATCH] cloudapi: use Logrus as default logger in Echo And remove log.Logger references --- cmd/osbuild-composer/composer.go | 2 +- cmd/osbuild-composer/config.go | 1 + cmd/osbuild-composer/main.go | 12 ++- go.mod | 1 + internal/cloudapi/server.go | 9 +- internal/cloudapi/v2/v2.go | 7 +- internal/cloudapi/v2/v2_test.go | 5 +- internal/common/echo_logrus.go | 175 +++++++++++++++++++++++++++++++ vendor/modules.txt | 1 + 9 files changed, 198 insertions(+), 15 deletions(-) create mode 100644 internal/common/echo_logrus.go diff --git a/cmd/osbuild-composer/composer.go b/cmd/osbuild-composer/composer.go index 338bbd0c3..6cd3afd22 100644 --- a/cmd/osbuild-composer/composer.go +++ b/cmd/osbuild-composer/composer.go @@ -103,7 +103,7 @@ func (c *Composer) InitWeldr(repoPaths []string, weldrListener net.Listener, } func (c *Composer) InitAPI(cert, key string, enableJWT bool, l net.Listener) error { - c.api = cloudapi.NewServer(c.logger, c.workers, c.rpm, c.distros) + c.api = cloudapi.NewServer(c.workers, c.rpm, c.distros) c.koji = kojiapi.NewServer(c.logger, c.workers, c.rpm, c.distros) clientAuth := tls.RequireAndVerifyClientCert diff --git a/cmd/osbuild-composer/config.go b/cmd/osbuild-composer/config.go index 69e46ff5b..7dc5bc3b4 100644 --- a/cmd/osbuild-composer/config.go +++ b/cmd/osbuild-composer/config.go @@ -35,6 +35,7 @@ type ComposerConfigFile struct { JWTACLFile string `toml:"jwt_acl_file"` } `toml:"composer_api"` WeldrAPI WeldrAPIConfig `toml:"weldr_api"` + logLevel string `toml:"log_level"` } type WeldrAPIConfig struct { diff --git a/cmd/osbuild-composer/main.go b/cmd/osbuild-composer/main.go index cdf653314..13495288a 100644 --- a/cmd/osbuild-composer/main.go +++ b/cmd/osbuild-composer/main.go @@ -6,6 +6,7 @@ import ( "os" "github.com/coreos/go-systemd/activation" + "github.com/sirupsen/logrus" ) const ( @@ -34,10 +35,19 @@ func main() { if os.IsNotExist(err) { config = &ComposerConfigFile{} } else { - log.Fatalf("Error loading configuration: %v", err) + logrus.Fatalf("Error loading configuration: %v", err) } } + logrus.SetOutput(os.Stdout) + logLevel, err := logrus.ParseLevel(config.logLevel) + + if err == nil { + logrus.SetLevel(logLevel) + } else { + logrus.Info("Failed to load loglevel from config:", err) + } + log.Println("Loaded configuration:") err = DumpConfig(config, log.Writer()) if err != nil { diff --git a/go.mod b/go.mod index b32fd63cb..25b3681f7 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/julienschmidt/httprouter v1.3.0 github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b github.com/labstack/echo/v4 v4.6.0 + github.com/labstack/gommon v0.3.0 github.com/openshift-online/ocm-sdk-go v0.1.208 github.com/prometheus/client_golang v1.11.0 github.com/prometheus/common v0.30.0 // indirect diff --git a/internal/cloudapi/server.go b/internal/cloudapi/server.go index 069251d76..a97d7096d 100644 --- a/internal/cloudapi/server.go +++ b/internal/cloudapi/server.go @@ -1,15 +1,14 @@ package cloudapi import ( - "log" "net/http" "github.com/osbuild/osbuild-composer/internal/distroregistry" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/worker" - "github.com/osbuild/osbuild-composer/internal/cloudapi/v1" - "github.com/osbuild/osbuild-composer/internal/cloudapi/v2" + v1 "github.com/osbuild/osbuild-composer/internal/cloudapi/v1" + v2 "github.com/osbuild/osbuild-composer/internal/cloudapi/v2" ) type Server struct { @@ -17,10 +16,10 @@ type Server struct { v2 *v2.Server } -func NewServer(logger *log.Logger, workers *worker.Server, rpmMetadata rpmmd.RPMMD, distros *distroregistry.Registry) *Server { +func NewServer(workers *worker.Server, rpmMetadata rpmmd.RPMMD, distros *distroregistry.Registry) *Server { server := &Server{ v1: v1.NewServer(workers, rpmMetadata, distros), - v2: v2.NewServer(logger, workers, rpmMetadata, distros), + v2: v2.NewServer(workers, rpmMetadata, distros), } return server } diff --git a/internal/cloudapi/v2/v2.go b/internal/cloudapi/v2/v2.go index 2b1c18796..2fc618ee4 100644 --- a/internal/cloudapi/v2/v2.go +++ b/internal/cloudapi/v2/v2.go @@ -6,7 +6,6 @@ import ( "encoding/json" "errors" "fmt" - "log" "math" "math/big" "net/http" @@ -31,7 +30,6 @@ import ( // Server represents the state of the cloud Server type Server struct { - logger *log.Logger workers *worker.Server rpmMetadata rpmmd.RPMMD distros *distroregistry.Registry @@ -43,7 +41,7 @@ type apiHandlers struct { type binder struct{} -func NewServer(logger *log.Logger, workers *worker.Server, rpmMetadata rpmmd.RPMMD, distros *distroregistry.Registry) *Server { +func NewServer(workers *worker.Server, rpmMetadata rpmmd.RPMMD, distros *distroregistry.Registry) *Server { server := &Server{ workers: workers, rpmMetadata: rpmMetadata, @@ -56,10 +54,9 @@ func (server *Server) Handler(path string) http.Handler { e := echo.New() e.Binder = binder{} e.HTTPErrorHandler = server.HTTPErrorHandler - e.StdLogger = server.logger e.Pre(common.OperationIDMiddleware) - e.Use(middleware.Recover()) + e.Logger = common.Logger() handler := apiHandlers{ server: server, diff --git a/internal/cloudapi/v2/v2_test.go b/internal/cloudapi/v2/v2_test.go index 7ec10d48b..ac14a821b 100644 --- a/internal/cloudapi/v2/v2_test.go +++ b/internal/cloudapi/v2/v2_test.go @@ -5,14 +5,13 @@ import ( "encoding/json" "fmt" "io/ioutil" - "log" "net/http" "os" "testing" "github.com/stretchr/testify/require" - "github.com/osbuild/osbuild-composer/internal/cloudapi/v2" + v2 "github.com/osbuild/osbuild-composer/internal/cloudapi/v2" "github.com/osbuild/osbuild-composer/internal/distro/test_distro" distro_mock "github.com/osbuild/osbuild-composer/internal/mocks/distro" rpmmd_mock "github.com/osbuild/osbuild-composer/internal/mocks/rpmmd" @@ -29,7 +28,7 @@ func newV2Server(t *testing.T, dir string) (*v2.Server, *worker.Server) { require.NoError(t, err) require.NotNil(t, distros) - v2Server := v2.NewServer(log.New(os.Stdout, "", 0), rpmFixture.Workers, rpm, distros) + v2Server := v2.NewServer(rpmFixture.Workers, rpm, distros) require.NotNil(t, v2Server) return v2Server, rpmFixture.Workers diff --git a/internal/common/echo_logrus.go b/internal/common/echo_logrus.go new file mode 100644 index 000000000..6871f8713 --- /dev/null +++ b/internal/common/echo_logrus.go @@ -0,0 +1,175 @@ +package common + +import ( + "encoding/json" + "io" + + "github.com/labstack/gommon/log" + "github.com/sirupsen/logrus" +) + +// EchoLogrusLogger extend logrus.Logger +type EchoLogrusLogger struct { + *logrus.Logger +} + +var commonLogger = &EchoLogrusLogger{ + Logger: logrus.StandardLogger(), +} + +func Logger() *EchoLogrusLogger { + return commonLogger +} + +func toEchoLevel(level logrus.Level) log.Lvl { + switch level { + case logrus.DebugLevel: + return log.DEBUG + case logrus.InfoLevel: + return log.INFO + case logrus.WarnLevel: + return log.WARN + case logrus.ErrorLevel: + return log.ERROR + } + + return log.OFF +} + +func (l *EchoLogrusLogger) Output() io.Writer { + return l.Out +} + +func (l *EchoLogrusLogger) SetOutput(w io.Writer) { + // disable operations that would change behavior of global logrus logger. +} + +func (l *EchoLogrusLogger) Level() log.Lvl { + return toEchoLevel(l.Logger.Level) +} + +func (l *EchoLogrusLogger) SetLevel(v log.Lvl) { + // disable operations that would change behavior of global logrus logger. +} + +func (l *EchoLogrusLogger) SetHeader(h string) { +} + +func (l *EchoLogrusLogger) Prefix() string { + return "" +} + +func (l *EchoLogrusLogger) SetPrefix(p string) { +} + +func (l *EchoLogrusLogger) Print(i ...interface{}) { + l.Logger.Print(i...) +} + +func (l *EchoLogrusLogger) Printf(format string, args ...interface{}) { + l.Logger.Printf(format, args...) +} + +func (l *EchoLogrusLogger) Printj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Println(string(b)) +} + +func (l *EchoLogrusLogger) Debug(i ...interface{}) { + l.Logger.Debug(i...) +} + +func (l *EchoLogrusLogger) Debugf(format string, args ...interface{}) { + l.Logger.Debugf(format, args...) +} + +func (l *EchoLogrusLogger) Debugj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Debugln(string(b)) +} + +func (l *EchoLogrusLogger) Info(i ...interface{}) { + l.Logger.Info(i...) +} + +func (l *EchoLogrusLogger) Infof(format string, args ...interface{}) { + l.Logger.Infof(format, args...) +} + +func (l *EchoLogrusLogger) Infoj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Infoln(string(b)) +} + +func (l *EchoLogrusLogger) Warn(i ...interface{}) { + l.Logger.Warn(i...) +} + +func (l *EchoLogrusLogger) Warnf(format string, args ...interface{}) { + l.Logger.Warnf(format, args...) +} + +func (l *EchoLogrusLogger) Warnj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Warnln(string(b)) +} + +func (l *EchoLogrusLogger) Error(i ...interface{}) { + l.Logger.Error(i...) +} + +func (l *EchoLogrusLogger) Errorf(format string, args ...interface{}) { + l.Logger.Errorf(format, args...) +} + +func (l *EchoLogrusLogger) Errorj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Errorln(string(b)) +} + +func (l *EchoLogrusLogger) Fatal(i ...interface{}) { + l.Logger.Fatal(i...) +} + +func (l *EchoLogrusLogger) Fatalf(format string, args ...interface{}) { + l.Logger.Fatalf(format, args...) +} + +func (l *EchoLogrusLogger) Fatalj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Fatalln(string(b)) +} + +func (l *EchoLogrusLogger) Panic(i ...interface{}) { + l.Logger.Panic(i...) +} + +func (l *EchoLogrusLogger) Panicf(format string, args ...interface{}) { + l.Logger.Panicf(format, args...) +} + +func (l *EchoLogrusLogger) Panicj(j log.JSON) { + b, err := json.Marshal(j) + if err != nil { + panic(err) + } + l.Logger.Panicln(string(b)) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index f43e2da48..9c98b9f4f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -254,6 +254,7 @@ github.com/kr/text github.com/labstack/echo/v4 github.com/labstack/echo/v4/middleware # github.com/labstack/gommon v0.3.0 +## explicit github.com/labstack/gommon/bytes github.com/labstack/gommon/color github.com/labstack/gommon/log