cloudapi: use Logrus as default logger in Echo
And remove log.Logger references
This commit is contained in:
parent
75372b98e1
commit
179009fec4
9 changed files with 198 additions and 15 deletions
|
|
@ -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 {
|
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)
|
c.koji = kojiapi.NewServer(c.logger, c.workers, c.rpm, c.distros)
|
||||||
|
|
||||||
clientAuth := tls.RequireAndVerifyClientCert
|
clientAuth := tls.RequireAndVerifyClientCert
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ type ComposerConfigFile struct {
|
||||||
JWTACLFile string `toml:"jwt_acl_file"`
|
JWTACLFile string `toml:"jwt_acl_file"`
|
||||||
} `toml:"composer_api"`
|
} `toml:"composer_api"`
|
||||||
WeldrAPI WeldrAPIConfig `toml:"weldr_api"`
|
WeldrAPI WeldrAPIConfig `toml:"weldr_api"`
|
||||||
|
logLevel string `toml:"log_level"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WeldrAPIConfig struct {
|
type WeldrAPIConfig struct {
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/coreos/go-systemd/activation"
|
"github.com/coreos/go-systemd/activation"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -34,10 +35,19 @@ func main() {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
config = &ComposerConfigFile{}
|
config = &ComposerConfigFile{}
|
||||||
} else {
|
} 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:")
|
log.Println("Loaded configuration:")
|
||||||
err = DumpConfig(config, log.Writer())
|
err = DumpConfig(config, log.Writer())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
1
go.mod
1
go.mod
|
|
@ -35,6 +35,7 @@ require (
|
||||||
github.com/julienschmidt/httprouter v1.3.0
|
github.com/julienschmidt/httprouter v1.3.0
|
||||||
github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b
|
github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b
|
||||||
github.com/labstack/echo/v4 v4.6.0
|
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/openshift-online/ocm-sdk-go v0.1.208
|
||||||
github.com/prometheus/client_golang v1.11.0
|
github.com/prometheus/client_golang v1.11.0
|
||||||
github.com/prometheus/common v0.30.0 // indirect
|
github.com/prometheus/common v0.30.0 // indirect
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
package cloudapi
|
package cloudapi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/distroregistry"
|
"github.com/osbuild/osbuild-composer/internal/distroregistry"
|
||||||
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
||||||
"github.com/osbuild/osbuild-composer/internal/worker"
|
"github.com/osbuild/osbuild-composer/internal/worker"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/cloudapi/v1"
|
v1 "github.com/osbuild/osbuild-composer/internal/cloudapi/v1"
|
||||||
"github.com/osbuild/osbuild-composer/internal/cloudapi/v2"
|
v2 "github.com/osbuild/osbuild-composer/internal/cloudapi/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
|
|
@ -17,10 +16,10 @@ type Server struct {
|
||||||
v2 *v2.Server
|
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{
|
server := &Server{
|
||||||
v1: v1.NewServer(workers, rpmMetadata, distros),
|
v1: v1.NewServer(workers, rpmMetadata, distros),
|
||||||
v2: v2.NewServer(logger, workers, rpmMetadata, distros),
|
v2: v2.NewServer(workers, rpmMetadata, distros),
|
||||||
}
|
}
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"math"
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
@ -31,7 +30,6 @@ import (
|
||||||
|
|
||||||
// Server represents the state of the cloud Server
|
// Server represents the state of the cloud Server
|
||||||
type Server struct {
|
type Server struct {
|
||||||
logger *log.Logger
|
|
||||||
workers *worker.Server
|
workers *worker.Server
|
||||||
rpmMetadata rpmmd.RPMMD
|
rpmMetadata rpmmd.RPMMD
|
||||||
distros *distroregistry.Registry
|
distros *distroregistry.Registry
|
||||||
|
|
@ -43,7 +41,7 @@ type apiHandlers struct {
|
||||||
|
|
||||||
type binder 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{
|
server := &Server{
|
||||||
workers: workers,
|
workers: workers,
|
||||||
rpmMetadata: rpmMetadata,
|
rpmMetadata: rpmMetadata,
|
||||||
|
|
@ -56,10 +54,9 @@ func (server *Server) Handler(path string) http.Handler {
|
||||||
e := echo.New()
|
e := echo.New()
|
||||||
e.Binder = binder{}
|
e.Binder = binder{}
|
||||||
e.HTTPErrorHandler = server.HTTPErrorHandler
|
e.HTTPErrorHandler = server.HTTPErrorHandler
|
||||||
e.StdLogger = server.logger
|
|
||||||
e.Pre(common.OperationIDMiddleware)
|
e.Pre(common.OperationIDMiddleware)
|
||||||
|
|
||||||
e.Use(middleware.Recover())
|
e.Use(middleware.Recover())
|
||||||
|
e.Logger = common.Logger()
|
||||||
|
|
||||||
handler := apiHandlers{
|
handler := apiHandlers{
|
||||||
server: server,
|
server: server,
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,13 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"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"
|
"github.com/osbuild/osbuild-composer/internal/distro/test_distro"
|
||||||
distro_mock "github.com/osbuild/osbuild-composer/internal/mocks/distro"
|
distro_mock "github.com/osbuild/osbuild-composer/internal/mocks/distro"
|
||||||
rpmmd_mock "github.com/osbuild/osbuild-composer/internal/mocks/rpmmd"
|
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.NoError(t, err)
|
||||||
require.NotNil(t, distros)
|
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)
|
require.NotNil(t, v2Server)
|
||||||
|
|
||||||
return v2Server, rpmFixture.Workers
|
return v2Server, rpmFixture.Workers
|
||||||
|
|
|
||||||
175
internal/common/echo_logrus.go
Normal file
175
internal/common/echo_logrus.go
Normal file
|
|
@ -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))
|
||||||
|
}
|
||||||
1
vendor/modules.txt
vendored
1
vendor/modules.txt
vendored
|
|
@ -254,6 +254,7 @@ github.com/kr/text
|
||||||
github.com/labstack/echo/v4
|
github.com/labstack/echo/v4
|
||||||
github.com/labstack/echo/v4/middleware
|
github.com/labstack/echo/v4/middleware
|
||||||
# github.com/labstack/gommon v0.3.0
|
# github.com/labstack/gommon v0.3.0
|
||||||
|
## explicit
|
||||||
github.com/labstack/gommon/bytes
|
github.com/labstack/gommon/bytes
|
||||||
github.com/labstack/gommon/color
|
github.com/labstack/gommon/color
|
||||||
github.com/labstack/gommon/log
|
github.com/labstack/gommon/log
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue