diff --git a/go.mod b/go.mod
index 849f6380956eb4bedc2fe5e39aa345e391c7fe14..244ef44e99c00e47a1625c2f976b77a1fccd8c55 100644
--- a/go.mod
+++ b/go.mod
@@ -1,20 +1,48 @@
 module info-manager-proxy
 
-go 1.22.0
+		go 1.23.0
+
+		require (
+		github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.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/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/pmezard/go-difflib v1.0.0 // indirect
+		github.com/stretchr/testify v1.9.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
+		<!--
+  - Copyright (c) 2024.
+  - 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.
+  -->
 
-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/pmezard/go-difflib v1.0.0 // indirect
-	github.com/stretchr/testify v1.9.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/internal/config/config.go b/internal/config/config.go
index dec3a3a4ee7d79ce14549e26777a40131dc1fa97..920dc2dc8badfa82236af1a4a9c9bd1290b35bc4 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"
diff --git a/internal/logging/logger.go b/internal/logging/logger.go
deleted file mode 100644
index aedbf57d1b6247f836c11b17f62c65e44e140854..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 (
-	"info-manager-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 e760453a43169d8578a1679e3537de0bb07f9918..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")
-	logOutput := buf.String()
-	assert.Contains(t, logOutput, "ERROR: test error")
-}
-
-func TestWarning(t *testing.T) {
-	buf := logMessage(LogLevelWarning, "test warning")
-	logOutput := buf.String()
-	assert.Contains(t, logOutput, "WARNING: test warning")
-}
-
-func TestInfo(t *testing.T) {
-	buf := logMessage(LogLevelInfo, "test info")
-	logOutput := buf.String()
-	assert.Contains(t, logOutput, "INFO: test info")
-}
-
-func TestDebug(t *testing.T) {
-	buf := logMessage(LogLevelDebug, "test debug")
-	logOutput := buf.String()
-	assert.Empty(t, logOutput)
-}
diff --git a/internal/logging/testdata/config.yml b/internal/logging/testdata/config.yml
deleted file mode 100644
index 6f5d5d32e43399a0dc52da8c6b66ee0128854cc4..0000000000000000000000000000000000000000
--- a/internal/logging/testdata/config.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-server:
-  port: 8082
-grpc:
-  url: "localhost:50051"
-logging:
-  level: "INFO"
\ No newline at end of file
diff --git a/internal/mock/globals.go b/internal/mock/globals.go
index 024c66e9075e1c6f4df7922d5239f38447f16485..88449ee9ddbb51c3d8aff53ccdee75c2b16ab755 100644
--- a/internal/mock/globals.go
+++ b/internal/mock/globals.go
@@ -24,7 +24,3 @@
  */
 
 package mock
-
-import "info-manager-proxy/internal/logging"
-
-var logger = logging.GetLogger()
diff --git a/internal/mock/grpc_server.go b/internal/mock/grpc_server.go
index 445dc425bd399173cc3af16787db157dd9053eb0..7493219634f083f1dad9a977fb2332a3ce18385b 100644
--- a/internal/mock/grpc_server.go
+++ b/internal/mock/grpc_server.go
@@ -26,6 +26,7 @@
 package mock
 
 import (
+    log "github.com/sirupsen/logrus"
 	"context"
 	"fmt"
 	"google.golang.org/grpc"
@@ -69,12 +70,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(fmt.Sprintf("gRPC server failed to listen: %v", err))
 	}
 
-	logger.Info("gRPC server listening on port %v", GrpcMockPort)
+	log.Info("gRPC server listening on port %v", 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 eaa39597f85aae40529aa400ae55d7618f580e43..9abf4bcf7bd0f424041d56a8e1d03c065907a8c7 100644
--- a/internal/server/globals.go
+++ b/internal/server/globals.go
@@ -25,6 +25,3 @@
 
 package server
 
-import "info-manager-proxy/internal/logging"
-
-var logger = logging.GetLogger()
diff --git a/internal/server/handler.go b/internal/server/handler.go
index 5b79e4cf4f0954eda755ec6c515dc626179d0644..c05537b0435ecd4092f86da62ecaba15e23001da 100644
--- a/internal/server/handler.go
+++ b/internal/server/handler.go
@@ -34,6 +34,7 @@ import (
 	"google.golang.org/grpc/credentials/insecure"
 	"google.golang.org/grpc/status"
 	pb "info-manager-proxy/gen/go"
+	log "github.com/sirupsen/logrus"
 	"net/http"
 )
 
@@ -41,14 +42,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("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("failed to register home endpoint: %v", err)
 	}
 }
 
@@ -56,7 +57,7 @@ func RegisterInformationEndpoints(ctx context.Context, mux *runtime.ServeMux, gr
 	opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
 	err := pb.RegisterInformationServiceHandlerFromEndpoint(ctx, mux, grpcUrl, opts)
 	if err != nil {
-		logger.Fatal("failed to register information endpoints: %v", err)
+		log.Fatal(fmt.Sprintf("failed to register information endpoints: %v", err))
 	}
 }
 
@@ -84,6 +85,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 bcbbf998025a7b88da00f85f5442359bc6ea6f6c..af3a8cbf2123acfe4bbe8db2c8580c899570abb5 100644
--- a/internal/server/http_gateway.go
+++ b/internal/server/http_gateway.go
@@ -31,7 +31,7 @@ import (
 	"info-manager-proxy/internal/config"
 	"info-manager-proxy/internal/mock"
 	"net/http"
-
+    log "github.com/sirupsen/logrus"
 	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
 )
 
@@ -54,9 +54,9 @@ func StartHttpGateway(conf config.Config) *http.Server {
 		Handler: RequestLoggingMiddleware(mux),
 	}
 
-	logger.Info("HTTP gateway listening on port %d", conf.Server.Port)
+	log.Info(fmt.Sprintf("HTTP gateway listening on port %d", conf.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))
 		}
 	})
 }
diff --git a/internal/server/middleware_test.go b/internal/server/middleware_test.go
index 0a304adc5bce634cccef8490507a353e9c3603e2..b1d3bd0bd93999e0b39276f299ae6409afc4c132 100644
--- a/internal/server/middleware_test.go
+++ b/internal/server/middleware_test.go
@@ -31,6 +31,7 @@ import (
 	"info-manager-proxy/internal/mock"
 	"net/http"
 	"testing"
+	log "github.com/sirupsen/logrus"
 )
 
 func TestRequestLoggingMiddleware(t *testing.T) {
@@ -39,12 +40,12 @@ func TestRequestLoggingMiddleware(t *testing.T) {
 		SetUpHttpGateway()
 
 		var buf bytes.Buffer
-		logger.BaseLogger.SetOutput(&buf)
+		log.Baselog.SetOutput(&buf)
 
-		originalFlags := logger.BaseLogger.Flags()
+		originalFlags := log.Baselog.Flags()
 		defer func() {
-			logger.BaseLogger.SetOutput(nil)
-			logger.BaseLogger.SetFlags(originalFlags)
+			log.Baselog.SetOutput(nil)
+			log.Baselog.SetFlags(originalFlags)
 		}()
 
 		http.Get("http://localhost:8082/api/v1/information/testId")
@@ -59,12 +60,12 @@ func TestRequestLoggingMiddleware(t *testing.T) {
 		SetUpHttpGateway()
 
 		var buf bytes.Buffer
-		logger.BaseLogger.SetOutput(&buf)
+		log.Baselog.SetOutput(&buf)
 
-		originalFlags := logger.BaseLogger.Flags()
+		originalFlags := log.Baselog.Flags()
 		defer func() {
-			logger.BaseLogger.SetOutput(nil)
-			logger.BaseLogger.SetFlags(originalFlags)
+			log.Baselog.SetOutput(nil)
+			log.Baselog.SetFlags(originalFlags)
 		}()
 
 		http.Get("http://localhost:8082/")