diff --git a/go.mod b/go.mod index 1442221..984f008 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,10 @@ go 1.23 require ( github.com/labstack/echo-contrib v0.17.1 github.com/labstack/echo/v4 v4.13.0 + github.com/labstack/gommon v0.4.2 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/redis/go-redis/v9 v9.7.0 + github.com/samber/slog-echo v1.14.7 github.com/sethvargo/go-password v0.3.1 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 @@ -35,10 +37,9 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/klauspost/compress v1.17.11 // indirect - github.com/labstack/gommon v0.4.2 // indirect github.com/lmittmann/tint v1.0.5 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect - github.com/magiconair/properties v1.8.7 // indirect + github.com/magiconair/properties v1.8.9 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -89,8 +90,8 @@ require ( golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241206012308-a4fef0638583 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241206012308-a4fef0638583 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect google.golang.org/grpc v1.68.1 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index f3bc0d7..398d9dc 100644 --- a/go.sum +++ b/go.sum @@ -61,6 +61,8 @@ github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMD github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= +github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -96,6 +98,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/samber/slog-echo v1.14.7 h1:HLKW0WDOU/t4OoDbq+R/ZHc8qFpXj+2YdRVQxyRwW24= +github.com/samber/slog-echo v1.14.7/go.mod h1:i8QlNMhE0rVr+Mjj5ZIm6DMuTQ87euvAL2jRAd5HNVY= github.com/samber/slog-multi v1.2.4 h1:k9x3JAWKJFPKffx+oXZ8TasaNuorIW4tG+TXxkt6Ry4= github.com/samber/slog-multi v1.2.4/go.mod h1:ACuZ5B6heK57TfMVkVknN2UZHoFfjCwRxR0Q2OXKHlo= github.com/sethvargo/go-password v0.3.1 h1:WqrLTjo7X6AcVYfC6R7GtSyuUQR9hGyAj/f1PYQZCJU= @@ -197,8 +201,12 @@ golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= google.golang.org/genproto/googleapis/api v0.0.0-20241206012308-a4fef0638583 h1:v+j+5gpj0FopU0KKLDGfDo9ZRRpKdi5UBrCP0f76kuY= google.golang.org/genproto/googleapis/api v0.0.0-20241206012308-a4fef0638583/go.mod h1:jehYqy3+AhJU9ve55aNOaSml7wUXjF9x6z2LcCfpAhY= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= google.golang.org/genproto/googleapis/rpc v0.0.0-20241206012308-a4fef0638583 h1:IfdSdTcLFy4lqUQrQJLkLt1PB+AsqVz6lwkWPzWEz10= google.golang.org/genproto/googleapis/rpc v0.0.0-20241206012308-a4fef0638583/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0= google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= diff --git a/libs/config.go b/libs/config.go index a5286b6..d1f19ec 100644 --- a/libs/config.go +++ b/libs/config.go @@ -17,6 +17,8 @@ import ( var tracerConfig = otel.Tracer("config") +var LogLeveler *slog.LevelVar + // This function initializes the configuration for an application using flags, environment variables, // and a YAML configuration file. func InitConfiguration() error { diff --git a/libs/utils.go b/libs/utils.go index 2a287b2..f175e71 100644 --- a/libs/utils.go +++ b/libs/utils.go @@ -5,6 +5,7 @@ import ( "crypto/rand" "encoding/base64" "encoding/hex" + "os" "strings" "github.com/sethvargo/go-password/password" @@ -97,3 +98,14 @@ func GenerateKey(ctx context.Context) (string, error) { return hex.EncodeToString(bytes), nil //encode key in bytes to string for saving } + +func GetAppName() string { + appName := os.Getenv("OTEL_SERVICE_NAME") + if appName == "" { + appName = os.Getenv("APP_NAME") + if appName == "" { + appName = "elastauth" + } + } + return appName +} diff --git a/libs/webserver.go b/libs/webserver.go index 57e3d82..cc77c86 100644 --- a/libs/webserver.go +++ b/libs/webserver.go @@ -2,14 +2,16 @@ package libs import ( "context" + "log/slog" _ "net/http/pprof" - "os" "strings" "github.com/labstack/echo-contrib/prometheus" + "github.com/labstack/gommon/log" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" + slogecho "github.com/samber/slog-echo" "github.com/spf13/viper" "go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho" "go.opentelemetry.io/otel" @@ -32,12 +34,17 @@ func WebserverInit(ctx context.Context) { e.HidePort = true - e.Debug = viper.GetBool("debug") + // setting log/slog log level as echo logger level + e.Logger.SetLevel(log.Lvl(LogLeveler.Level().Level())) - e.Use(middleware.Logger()) + e.Debug = strings.EqualFold(LogLeveler.Level().String(), "debug") || viper.GetBool("debug") + + e.Use(slogecho.New(slog.Default())) if viper.GetBool("enableOtel") { - e.Use(otelecho.Middleware(os.Getenv("OTEL_SERVICE_NAME"))) + e.Use(otelecho.Middleware(GetAppName(), otelecho.WithSkipper(func(c echo.Context) bool { + return strings.Contains(c.Path(), "health") + }))) } // This code block is checking if the `enable_metrics` flag is set to true in the configuration file diff --git a/logger/logger.go b/logger/logger.go index 2366359..7aca13d 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -5,6 +5,7 @@ import ( "log/slog" "os" + "github.com/wasilak/elastauth/libs" "github.com/wasilak/loggergo" loggergoLib "github.com/wasilak/loggergo/lib" loggergoTypes "github.com/wasilak/loggergo/lib/types" @@ -28,4 +29,6 @@ func LoggerInit(ctx context.Context, level string, logFormat string) { slog.ErrorContext(ctx, err.Error()) os.Exit(1) } + + libs.LogLeveler = loggergo.GetLogLevelAccessor() }