diff --git a/go.mod b/go.mod index 0085a0c06685cd24686cd43a36cb12c784cd8d8c..bf0c65277460dc77f8d7aad65cfc0cf5e9c761b5 100644 --- a/go.mod +++ b/go.mod @@ -1,20 +1,28 @@ module fachstellen-proxy -go 1.22.0 +go 1.23.0 + +require ( + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 + github.com/sirupsen/logrus v1.7.0 + github.com/stretchr/testify v1.9.0 + go.elastic.co/ecslogrus v1.0.0 + google.golang.org/grpc v1.64.0 + gopkg.in/yaml.v3 v3.0.1 +) + +require github.com/magefile/mage v1.9.0 // indirect require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 + github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.9.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/grpc v1.64.0 // indirect - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 // indirect google.golang.org/protobuf v1.34.2 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 96e321835b1641b097867e86d0d3f285cfbf5614..eaf3d1ae2616bec30703b294320830fcc3110dab 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,33 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/magefile/mage v1.9.0 h1:t3AU2wNwehMCW97vuqQLtw6puppWXHO+O2MHo5a50XE= +github.com/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.0/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.elastic.co/ecslogrus v1.0.0 h1:o1qvcCNaq+eyH804AuK6OOiUupLIXVDfYjDtSLPwukM= +go.elastic.co/ecslogrus v1.0.0/go.mod h1:vMdpljurPbwu+iFmNc/HSWCkn1Fu/dYde1o/adaEczo= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= @@ -29,5 +47,7 @@ google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/config/config.go b/internal/config/config.go index 556a664e9bdfbede3df3b383a2942bc720b4e3c8..b80a5af83ddb80918bc223fd4da434204367171a 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -28,7 +28,8 @@ package config import ( "github.com/kelseyhightower/envconfig" "gopkg.in/yaml.v3" - "log" + log "github.com/sirupsen/logrus" + "go.elastic.co/ecslogrus" "os" "regexp" "testing" @@ -71,6 +72,7 @@ type Config struct { func LoadConfig(configFilePath ...string) Config { var config Config + log.SetFormatter(&ecslogrus.Formatter{}) configFile := defaultConfig diff --git a/internal/logging/logger.go b/internal/logging/logger.go deleted file mode 100644 index 6ce32e5aa9333b372d482136855f19c67ca9c5d8..0000000000000000000000000000000000000000 --- a/internal/logging/logger.go +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2023-2024 - * Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package logging - -import ( - "fachstellen-proxy/internal/config" - "fmt" - "log" - "os" - "sync" -) - -const ( - logLevelNumError = iota - logLevelNumWarning - logLevelNumInfo - logLevelNumDebug - LogLevelError = "ERROR" - LogLevelWarning = "WARN" - LogLevelInfo = "INFO" - LogLevelDebug = "DEBUG" -) - -type Logger struct { - BaseLogger *log.Logger - level int -} - -var ( - logger *Logger - once sync.Once -) - -func GetLogger() *Logger { - initializeLogger() - - return logger -} - -func initializeLogger() { - once.Do(func() { - logger = &Logger{ - BaseLogger: log.New(os.Stdout, "", log.LstdFlags), - level: getLoggingLevel(), - } - }) -} - -func getLoggingLevel() int { - logLevelMap := map[string]int{ - LogLevelError: logLevelNumError, - LogLevelWarning: logLevelNumWarning, - LogLevelInfo: logLevelNumInfo, - LogLevelDebug: logLevelNumDebug, - } - - conf := config.LoadConfig() - logLevel, exists := logLevelMap[conf.Logging.Level] - if !exists { - logLevel = logLevelMap[LogLevelInfo] - } - - return logLevel -} - -func (l *Logger) log(level int, prefix, format string, v ...any) { - if l.level >= level { - l.BaseLogger.Println(fmt.Sprintf("%v: %v", prefix, fmt.Sprintf(format, v...))) - } -} - -func (l *Logger) Fatal(format string, v ...any) { - l.BaseLogger.Fatalln(fmt.Sprintf("FATAL: "+format, v...)) -} - -func (l *Logger) Error(format string, v ...any) { - l.log(logLevelNumError, "ERROR", format, v...) -} - -func (l *Logger) Warning(format string, v ...any) { - l.log(logLevelNumWarning, "WARNING", format, v...) -} - -func (l *Logger) Info(format string, v ...any) { - l.log(logLevelNumInfo, "INFO", format, v...) -} - -func (l *Logger) Debug(format string, v ...any) { - l.log(logLevelNumDebug, "DEBUG", format, v...) -} diff --git a/internal/logging/logger_test.go b/internal/logging/logger_test.go deleted file mode 100644 index f0b209ca5d6f61b82ae3e38d3ef1316c8980c1f2..0000000000000000000000000000000000000000 --- a/internal/logging/logger_test.go +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2023-2024 - * Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package logging - -import ( - "bytes" - "github.com/stretchr/testify/assert" - "testing" -) - -func logMessage(level string, msg string) *bytes.Buffer { - logger := GetLogger() - - var buf bytes.Buffer - logger.BaseLogger.SetOutput(&buf) - - originalFlags := logger.BaseLogger.Flags() - defer func() { - logger.BaseLogger.SetOutput(nil) - logger.BaseLogger.SetFlags(originalFlags) - }() - - if level == LogLevelError { - logger.Error(msg) - } else if level == LogLevelWarning { - logger.Warning(msg) - } else if level == LogLevelInfo { - logger.Info(msg) - } else { - logger.Debug(msg) - } - - return &buf -} - -func TestError(t *testing.T) { - buf := logMessage(LogLevelError, "test error") - - assert.Contains(t, buf.String(), "ERROR: test error") -} - -func TestWarning(t *testing.T) { - buf := logMessage(LogLevelWarning, "test warning") - - assert.Contains(t, buf.String(), "WARNING: test warning") -} - -func TestInfo(t *testing.T) { - buf := logMessage(LogLevelInfo, "test info") - - assert.Contains(t, buf.String(), "INFO: test info") -} - -func TestDebug(t *testing.T) { - buf := logMessage(LogLevelDebug, "test debug") - - assert.Empty(t, buf.String()) -} diff --git a/internal/logging/testdata/config.yml b/internal/logging/testdata/config.yml deleted file mode 100644 index 64e799f15a52e1afec93177b366e66a3c8c87c88..0000000000000000000000000000000000000000 --- a/internal/logging/testdata/config.yml +++ /dev/null @@ -1,14 +0,0 @@ -http: - server: - port: 8080 -grpc: - collaboration: - server: - port: 50052 - router: - port: 50051 - registration: - server: - url: "localhost:50052" -logging: - level: "INFO" \ No newline at end of file diff --git a/internal/mock/globals.go b/internal/mock/globals.go deleted file mode 100644 index b08a0f5c817db69d342f9704224dbe0c3789b883..0000000000000000000000000000000000000000 --- a/internal/mock/globals.go +++ /dev/null @@ -1,5 +0,0 @@ -package mock - -import "fachstellen-proxy/internal/logging" - -var logger = logging.GetLogger() diff --git a/internal/mock/grpc_server.go b/internal/mock/grpc_server.go index 404336c8351a10678f7ef39e7c8d47c640727c32..1ad07aad830570c53cf331048683da3f3c696701 100644 --- a/internal/mock/grpc_server.go +++ b/internal/mock/grpc_server.go @@ -28,6 +28,7 @@ package mock import ( "context" pb "fachstellen-proxy/gen/go" + log "github.com/sirupsen/logrus" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -126,12 +127,12 @@ func StartGrpcServer() *grpc.Server { lis, err := net.Listen("tcp", fmt.Sprintf(":%d", GrpcMockPort)) if err != nil { - logger.Fatal("gRPC server failed to listen: %v", err) + log.Fatal("gRPC server failed to listen: %v", err) } - logger.Info("gRPC server listening on port %d", GrpcMockPort) + log.Info(fmt.Sprintf("gRPC server listening on port %d", GrpcMockPort)) if err := s.Serve(lis); err != nil { - logger.Fatal("gRPC server failed to serve: %v", err) + log.Fatal(fmt.Sprintf("gRPC server failed to serve: %v", err)) } return s diff --git a/internal/server/globals.go b/internal/server/globals.go index e0ac55ecc9acee1da4dd01afc4f5bb237bfc3d6d..e37d71d760bc32ea30d6968315158edb772d8db6 100644 --- a/internal/server/globals.go +++ b/internal/server/globals.go @@ -2,7 +2,6 @@ package server import ( "fachstellen-proxy/internal/config" - "fachstellen-proxy/internal/logging" ) const ( @@ -10,5 +9,4 @@ const ( GrpcAddressMetadata = "x-grpc-address" ) -var conf = config.LoadConfig() -var logger = logging.GetLogger() +var conf = config.LoadConfig() \ No newline at end of file diff --git a/internal/server/grpc_router.go b/internal/server/grpc_router.go index 359f0c86944f99dd0a5cf0b8d0615939d9fa65c0..f3f6011fd26a0f4964356a1b7549cab17be5b6d4 100644 --- a/internal/server/grpc_router.go +++ b/internal/server/grpc_router.go @@ -28,6 +28,7 @@ package server import ( "context" "errors" + log "github.com/sirupsen/logrus" pb "fachstellen-proxy/gen/go" "fachstellen-proxy/internal/config" "fachstellen-proxy/internal/mock" @@ -84,7 +85,7 @@ func createCollaborationClient(grpcAddress string) (pb.CollaborationServiceClien target := GetCollaborationServerUrl(grpcAddress, conf) conn, err := grpc.NewClient(target, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { - logger.Error("collaboration router failed to route: %v", err) + log.Error(fmt.Sprintf("collaboration router failed to route: %v", err)) return nil, nil, errors.New("collaboration router failed to route") } @@ -107,12 +108,12 @@ func StartCollaborationRouter() *grpc.Server { lis, err := net.Listen("tcp", fmt.Sprintf(":%d", conf.Grpc.Collaboration.Router.Port)) if err != nil { - logger.Fatal("collaboration router failed to listen: %v", err) + log.Fatal(fmt.Sprintf("collaboration router failed to listen: %v", err)) } - logger.Info("collaboration router listening on port %d", conf.Grpc.Collaboration.Router.Port) + log.Info(fmt.Sprintf("collaboration router listening on port %d", conf.Grpc.Collaboration.Router.Port)) if err := s.Serve(lis); err != nil { - logger.Fatal("collaboration router failed to serve: %v", err) + log.Fatal(fmt.Sprintf("collaboration router failed to serve: %v", err)) } return s diff --git a/internal/server/handler.go b/internal/server/handler.go index 7b024d5b2cf0f44b14e36a1c899c4ffd7aa0cfeb..1bcc1c687fd052f1ed5a8602dfc5e8f2de4434bf 100644 --- a/internal/server/handler.go +++ b/internal/server/handler.go @@ -28,6 +28,7 @@ package server import ( "bytes" "context" + log "github.com/sirupsen/logrus" pb "fachstellen-proxy/gen/go" "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -49,14 +50,14 @@ func RegisterHomeEndpoint(mux *runtime.ServeMux) { err := mux.HandlePath("GET", "/", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { defer func() { if err := recover(); err != nil { - logger.Error("failed to recover: %v", err) + log.Error(fmt.Sprintf("failed to recover: %v", err)) http.Error(w, fmt.Sprintf("failed to recover: %v", err), http.StatusInternalServerError) } }() }) if err != nil { - logger.Fatal("failed to register home endpoint: %v", err) + log.Fatal(fmt.Sprintf("failed to register home endpoint: %v", err)) } } @@ -64,7 +65,7 @@ func RegisterFachstelleRegistrationEndpoints(ctx context.Context, mux *runtime.S opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} err := pb.RegisterFachstelleRegistrationServiceHandlerFromEndpoint(ctx, mux, grpcUrl, opts) if err != nil { - logger.Fatal("failed to register fachstelle registration endpoints: %v", err) + log.Fatal(fmt.Sprintf("failed to register fachstelle registration endpoints: %v", err)) } } @@ -72,7 +73,7 @@ func RegisterCollaborationEndpoints(ctx context.Context, mux *runtime.ServeMux, opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} err := pb.RegisterCollaborationServiceHandlerFromEndpoint(ctx, mux, grpcUrl, opts) if err != nil { - logger.Fatal("failed to register collaboration endpoints: %v", err) + log.Fatal(fmt.Sprintf("failed to register collaboration endpoints: %v", err)) } } @@ -80,7 +81,7 @@ func RegisterGetFileEndpoint(mux *runtime.ServeMux) { err := mux.HandlePath("GET", "/api/file/{"+fileIdParam+"}/{"+samlTokenParam+"}", getFileHandler) if err != nil { - logger.Fatal("failed to register get file endpoint: %v", err) + log.Fatal(fmt.Sprintf("failed to register get file endpoint: %v", err)) } } @@ -159,6 +160,6 @@ func ErrorHandler(ctx context.Context, mux *runtime.ServeMux, marshaler runtime. _, writeErr := w.Write([]byte(st.Message())) if writeErr != nil { - logger.Fatal("failed to handle grpc error: %v", writeErr) + log.Fatal(fmt.Sprintf("failed to handle grpc error: %v", writeErr)) } } diff --git a/internal/server/http_gateway.go b/internal/server/http_gateway.go index f3ae00a49b461a9e2c9d46b6be580cb71a0a2978..3e940410736d0c0538f7887930be77d371d4661c 100644 --- a/internal/server/http_gateway.go +++ b/internal/server/http_gateway.go @@ -32,6 +32,7 @@ import ( "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "net/http" + log "github.com/sirupsen/logrus" ) func HeaderMatcher(header string) (string, bool) { @@ -60,9 +61,9 @@ func StartHttpGateway() *http.Server { Handler: RequestLoggingMiddleware(mux), } - logger.Info("HTTP gateway listening on port %d", conf.Http.Server.Port) + log.Info(fmt.Sprintf("HTTP gateway listening on port %d", conf.Http.Server.Port)) if err := httpServer.ListenAndServe(); err != nil { - logger.Fatal("HTTP gateway failed to serve: %v", err) + log.Fatal(fmt.Sprintf("HTTP gateway failed to serve: %v", err)) } return httpServer diff --git a/internal/server/middleware.go b/internal/server/middleware.go index 41710750de6006fed161507fd8ba65846ef1601b..e92479864b281cf44d22f0b8cac9f8620306fa85 100644 --- a/internal/server/middleware.go +++ b/internal/server/middleware.go @@ -30,6 +30,7 @@ import ( "fmt" "io" "net/http" + log "github.com/sirupsen/logrus" ) const HomeUrlPath = "/" @@ -53,21 +54,21 @@ func RequestLoggingMiddleware(h http.Handler) http.Handler { body, err := io.ReadAll(r.Body) if err != nil { - logger.Error("failed to read %v request body for %v: %v", r.Method, r.URL.Path, err) + log.Error(fmt.Sprintf("failed to read %v request body for %v: %v", r.Method, r.URL.Path, err)) http.Error(w, fmt.Sprintf("failed to read request body: %v", err), http.StatusBadRequest) return } r.Body = io.NopCloser(bytes.NewReader(body)) - logger.Debug("received %v request for %v with body: %v", r.Method, r.URL.Path, string(body)) + log.Debug(fmt.Sprintf("received %v request for %v with body: %v", r.Method, r.URL.Path, string(body))) lw := &logResponseWriter{w, http.StatusOK} h.ServeHTTP(lw, r) if lw.statusCode == http.StatusOK { - logger.Debug("successfully handled %v request for %v with body: %v", r.Method, r.URL.Path, string(body)) + log.Debug(fmt.Sprintf("successfully handled %v request for %v with body: %v", r.Method, r.URL.Path, string(body))) } else { - logger.Error("failed handling %v request for %v with body: %v, status code: %d", r.Method, r.URL.Path, string(body), lw.statusCode) + log.Error(fmt.Sprintf("failed handling %v request for %v with body: %v, status code: %d", r.Method, r.URL.Path, string(body), lw.statusCode)) } }) }