From adc26b8d25d46100c7f0bd795d043fb9856f8005 Mon Sep 17 00:00:00 2001 From: raf555 Date: Tue, 5 May 2026 22:08:05 +0700 Subject: [PATCH 1/3] fix: do not check entryNo from entries length --- internal/dictionary/dictionary.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/dictionary/dictionary.go b/internal/dictionary/dictionary.go index 4601c83..7654069 100644 --- a/internal/dictionary/dictionary.go +++ b/internal/dictionary/dictionary.go @@ -133,10 +133,6 @@ func (d *Dictionary) Lemma(lemma string, entryNo int) (Lemma, error) { } if entryNo > 0 { - if entryNo > len(lemmaData.Entries) { - return Lemma{}, ErrEntryNotFound - } - entryIndexes, ok := index.entryNoMap[entryNo] if !ok { return Lemma{}, ErrEntryNotFound From 5090d1fdd6bd3a29225476c6c0615fa7615054e2 Mon Sep 17 00:00:00 2001 From: raf555 Date: Tue, 5 May 2026 22:10:37 +0700 Subject: [PATCH 2/3] chore: supress error logs --- internal/http/httphandler/handler.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/http/httphandler/handler.go b/internal/http/httphandler/handler.go index 0f26cf2..0f0fd30 100644 --- a/internal/http/httphandler/handler.go +++ b/internal/http/httphandler/handler.go @@ -60,7 +60,12 @@ func sendResponse[resT any](ctx *ginCtx, res *resT, err error, opts ...handlerOp statusCodeMessage := http.StatusText(statusCode) if err != nil { - logger.FromContext(ctx).ErrorContext(ctx, "HTTP error occurred", logger.Error(err), slog.Int("code", statusCode)) + l := logger.FromContext(ctx) + logFn := l.ErrorContext + if statusCode >= 400 && statusCode < 500 { + logFn = l.WarnContext + } + logFn(ctx, "HTTP error occurred", logger.Error(err), slog.Int("code", statusCode)) innerErrMsg := statusCodeMessage From 52fd3ce518cf41aa81163770d6638ea217066bbe Mon Sep 17 00:00:00 2001 From: raf555 Date: Tue, 5 May 2026 22:44:33 +0700 Subject: [PATCH 3/3] add log level as config --- internal/logger/config.go | 7 +++++++ internal/logger/loggerfx/logger.go | 2 ++ internal/logger/slog.go | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 internal/logger/config.go diff --git a/internal/logger/config.go b/internal/logger/config.go new file mode 100644 index 0000000..c846d7f --- /dev/null +++ b/internal/logger/config.go @@ -0,0 +1,7 @@ +package logger + +import "log/slog" + +type Config struct { + Level slog.Level `env:"LOG_LEVEL,default=INFO"` +} diff --git a/internal/logger/loggerfx/logger.go b/internal/logger/loggerfx/logger.go index 6e29ee7..aadcf13 100644 --- a/internal/logger/loggerfx/logger.go +++ b/internal/logger/loggerfx/logger.go @@ -7,11 +7,13 @@ import ( contexts "github.com/raf555/kbbi-api/internal/context" "github.com/raf555/kbbi-api/internal/context/contextfx" "github.com/raf555/kbbi-api/internal/logger" + salomeconfig "github.com/raf555/salome/config/v1" "go.uber.org/fx" ) var Provider = fx.Module( "logger", + fx.Provide(salomeconfig.LoadConfigTo[logger.Config], fx.Private), fx.Provide(logger.New), contextfx.Provider(func(log *slog.Logger) contexts.ContextDecoratorFn { return func(ctx context.Context) context.Context { diff --git a/internal/logger/slog.go b/internal/logger/slog.go index 5a154c2..5969ca0 100644 --- a/internal/logger/slog.go +++ b/internal/logger/slog.go @@ -8,10 +8,10 @@ import ( slogformatter "github.com/samber/slog-formatter" ) -func New() *slog.Logger { +func New(cfg Config) *slog.Logger { var handler slog.Handler - handler = slog.NewJSONHandler(os.Stdout, nil) + handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: cfg.Level}) handler = log.WithOtelHandler(handler) handler = log.WithFormatter(handler, slogformatter.FormatByKind(slog.KindDuration, func(v slog.Value) slog.Value { return slog.StringValue(v.Duration().String())