all repos

onasty @ e6c5d1c

a one-time notes service
5 files changed, 19 insertions(+), 24 deletions(-)
refactor: logger set default interface (#131)

* refactor(logger): set the default logger

* refactor: use new logger interface

* fix(e2e): naming

* docs(logger): add doc comment
Author: Smirnov Oleksandr ss2316544@gmail.com
Committed by: GitHub noreply@github.com
Committed at: 2025-06-09 18:11:44 +0300
Parent: 060f2e6
M cmd/api/main.go
···
        49
        49
         	cfg := config.NewConfig()

      
        50
        50
         

      
        51
        51
         	// logger

      
        52
        
        -	logger, err := logger.NewCustomLogger(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine)

      
        53
        
        -	if err != nil {

      
        
        52
        +	if err := logger.SetDefault(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine); err != nil {

      
        54
        53
         		return err

      
        55
        54
         	}

      
        56
        
        -

      
        57
        
        -	slog.SetDefault(logger)

      
        58
        55
         

      
        59
        56
         	// semi dev mode

      
        60
        57
         	if !cfg.AppEnv.IsDevMode() {

      
M cmd/seed/main.go
···
        22
        22
         func run(ctx context.Context) error {

      
        23
        23
         	cfg := config.NewConfig()

      
        24
        24
         

      
        25
        
        -	logger, err := logger.NewCustomLogger(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine)

      
        26
        
        -	if err != nil {

      
        
        25
        +	if err := logger.SetDefault(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine); err != nil {

      
        27
        26
         		return err

      
        28
        27
         	}

      
        29
        
        -	slog.SetDefault(logger)

      
        30
        28
         

      
        31
        29
         	psql, err := psqlutil.Connect(ctx, cfg.PostgresDSN)

      
        32
        30
         	if err != nil {

      
M e2e/e2e_test.go
···
        3
        3
         import (

      
        4
        4
         	"context"

      
        5
        5
         	"fmt"

      
        6
        
        -	"log/slog"

      
        7
        6
         	"net/http"

      
        8
        7
         	"testing"

      
        9
        8
         	"time"

      ···
        94
        93
         func (e *AppTestSuite) initDeps() {

      
        95
        94
         	cfg := e.getConfig()

      
        96
        95
         

      
        97
        
        -	logger, err := logger.NewCustomLogger(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine)

      
        
        96
        +	err := logger.SetDefault(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine)

      
        98
        97
         	e.require.NoError(err)

      
        99
        
        -

      
        100
        
        -	slog.SetDefault(logger)

      
        101
        98
         

      
        102
        99
         	e.hasher = hasher.NewSHA256Hasher(cfg.PasswordSalt)

      
        103
        100
         	e.jwtTokenizer = jwtutil.NewJWTUtil(cfg.JwtSigningKey, time.Hour)

      ···
        106
        103
         	vertokrepo := vertokrepo.New(e.postgresDB)

      
        107
        104
         	pwdtokrepo := passwordtokrepo.NewPasswordResetTokenRepo(e.postgresDB)

      
        108
        105
         

      
        109
        
        -	oauthProvider := newOauthProviderMock()

      
        
        106
        +	stubOAuthProvider := newOauthProviderMock()

      
        110
        107
         

      
        111
        108
         	userepo := userepo.New(e.postgresDB)

      
        112
        109
         	usercache := usercache.New(e.redisDB, cfg.CacheUsersTTL)

      ···
        119
        116
         		e.jwtTokenizer,

      
        120
        117
         		newMailerMockService(),

      
        121
        118
         		usercache,

      
        122
        
        -		oauthProvider,

      
        123
        
        -		oauthProvider,

      
        
        119
        +		stubOAuthProvider,

      
        
        120
        +		stubOAuthProvider,

      
        124
        121
         		cfg.JwtRefreshTokenTTL,

      
        125
        122
         		cfg.VerificationTokenTTL,

      
        126
        123
         		cfg.ResetPasswordTokenTTL,

      
M internal/logger/logger.go
···
        9
        9
         	"github.com/olexsmir/onasty/internal/transport/http/reqid"

      
        10
        10
         )

      
        11
        11
         

      
        12
        
        -type CustomLogger struct{ slog.Handler }

      
        
        12
        +var (

      
        
        13
        +	ErrUnknownLevel  = errors.New("unknown log level")

      
        
        14
        +	ErrUnknownFormat = errors.New("unknown log format")

      
        
        15
        +)

      
        13
        16
         

      
        14
        
        -//nolint:err113

      
        15
        
        -func NewCustomLogger(lvl, format string, showLine bool) (*slog.Logger, error) {

      
        
        17
        +// SetDefault configures and set default [slog.Logger]

      
        
        18
        +func SetDefault(lvl, format string, showLine bool) error {

      
        16
        19
         	loggerLevels := map[string]slog.Level{

      
        17
        20
         		"info":  slog.LevelInfo,

      
        18
        21
         		"debug": slog.LevelDebug,

      ···
        22
        25
         

      
        23
        26
         	logLevel, ok := loggerLevels[lvl]

      
        24
        27
         	if !ok {

      
        25
        
        -		return nil, errors.New("unknown log level")

      
        
        28
        +		return ErrUnknownLevel

      
        26
        29
         	}

      
        27
        30
         

      
        28
        31
         	handlerOptions := &slog.HandlerOptions{

      ···
        37
        40
         	case "text", "txt":

      
        38
        41
         		slogHandler = slog.NewTextHandler(os.Stdout, handlerOptions)

      
        39
        42
         	default:

      
        40
        
        -		return nil, errors.New("unknown log format")

      
        
        43
        +		return ErrUnknownFormat

      
        41
        44
         	}

      
        42
        45
         

      
        43
        
        -	return slog.New(&CustomLogger{Handler: slogHandler}), nil

      
        
        46
        +	slog.SetDefault(slog.New(&CustomLogger{Handler: slogHandler}))

      
        
        47
        +	return nil

      
        44
        48
         }

      
        
        49
        +

      
        
        50
        +type CustomLogger struct{ slog.Handler }

      
        45
        51
         

      
        46
        52
         func (l *CustomLogger) Handle(ctx context.Context, r slog.Record) error {

      
        47
        53
         	if requestID := reqid.GetContext(ctx); requestID != "" {

      
M mailer/main.go
···
        38
        38
         		return err

      
        39
        39
         	}

      
        40
        40
         

      
        41
        
        -	logger, err := logger.NewCustomLogger(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine)

      
        42
        
        -	if err != nil {

      
        
        41
        +	if err = logger.SetDefault(cfg.LogLevel, cfg.LogFormat, cfg.LogShowLine); err != nil {

      
        43
        42
         		return err

      
        44
        43
         	}

      
        45
        
        -

      
        46
        
        -	slog.SetDefault(logger)

      
        47
        44
         

      
        48
        45
         	//nolint:exhaustruct

      
        49
        46
         	svc, err := micro.AddService(nc, micro.Config{