Skip to content

Commit

Permalink
refactor: refactor logging system with conditional builds
Browse files Browse the repository at this point in the history
- Remove logging implementation from `logger.go`
- Create `logger_default.go` with the previous logging implementation from `logger.go`
- Create `logger_slog.go` with a new logging implementation using `slog` for the `Infof` method
- Add build tags to differentiate between `logger_default.go` and `logger_slog.go` based on Go version

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
  • Loading branch information
appleboy committed Mar 9, 2024
1 parent 54f0097 commit 5bf556c
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 45 deletions.
47 changes: 2 additions & 45 deletions logger.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
package graceful

import (
"fmt"
"log"
"os"
)

// Logger interface is used throughout gorush
type Logger interface {
Infof(format string, args ...interface{})
Expand All @@ -16,45 +10,6 @@ type Logger interface {
Fatal(args ...interface{})
}

// NewLogger for simple logger.
func NewLogger() Logger {
return defaultLogger{
infoLogger: log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile),
errorLogger: log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile),
fatalLogger: log.New(os.Stderr, "FATAL: ", log.Ldate|log.Ltime|log.Lshortfile),
}
}

type defaultLogger struct {
infoLogger *log.Logger
errorLogger *log.Logger
fatalLogger *log.Logger
}

func (l defaultLogger) Infof(format string, args ...interface{}) {
l.infoLogger.Printf(format, args...)
}

func (l defaultLogger) Errorf(format string, args ...interface{}) {
l.errorLogger.Printf(format, args...)
}

func (l defaultLogger) Fatalf(format string, args ...interface{}) {
l.fatalLogger.Fatalf(format, args...)
}

func (l defaultLogger) Info(args ...interface{}) {
l.infoLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Error(args ...interface{}) {
l.errorLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Fatal(args ...interface{}) {
l.fatalLogger.Println(fmt.Sprint(args...))
}

// NewEmptyLogger for simple logger.
func NewEmptyLogger() Logger {
return emptyLogger{}
Expand All @@ -63,6 +18,8 @@ func NewEmptyLogger() Logger {
// EmptyLogger no meesgae logger
type emptyLogger struct{}

// Infof logs an informational message with a formatted string and optional arguments.
// It does not perform any logging in the emptyLogger implementation.
func (l emptyLogger) Infof(format string, args ...interface{}) {}
func (l emptyLogger) Errorf(format string, args ...interface{}) {}
func (l emptyLogger) Fatalf(format string, args ...interface{}) {}
Expand Down
48 changes: 48 additions & 0 deletions logger_default.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//go:build !go1.21

package graceful

import (
"fmt"
"log"
"os"
)

// NewLogger for simple logger.
func NewLogger() Logger {
return defaultLogger{
infoLogger: log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile),
errorLogger: log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile),
fatalLogger: log.New(os.Stderr, "FATAL: ", log.Ldate|log.Ltime|log.Lshortfile),
}
}

type defaultLogger struct {
infoLogger *log.Logger
errorLogger *log.Logger
fatalLogger *log.Logger
}

func (l defaultLogger) Infof(format string, args ...interface{}) {
l.infoLogger.Printf(format, args...)
}

func (l defaultLogger) Errorf(format string, args ...interface{}) {
l.errorLogger.Printf(format, args...)
}

func (l defaultLogger) Fatalf(format string, args ...interface{}) {
l.fatalLogger.Fatalf(format, args...)
}

func (l defaultLogger) Info(args ...interface{}) {
l.infoLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Error(args ...interface{}) {
l.errorLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Fatal(args ...interface{}) {
l.fatalLogger.Println(fmt.Sprint(args...))
}
49 changes: 49 additions & 0 deletions logger_slog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
//go:build go1.21

package graceful

import (
"fmt"
"log"
"log/slog"

Check failure on line 8 in logger_slog.go

View workflow job for this annotation

GitHub Actions / ubuntu-latest @ Go 1.15

package log/slog is not in GOROOT (/opt/hostedtoolcache/go/1.15.15/x64/src/log/slog)
"os"
)

// NewLogger for simple logger.
func NewLogger() Logger {
return defaultLogger{
infoLogger: log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile),
errorLogger: log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile),
fatalLogger: log.New(os.Stderr, "FATAL: ", log.Ldate|log.Ltime|log.Lshortfile),
}
}

type defaultLogger struct {
infoLogger *log.Logger
errorLogger *log.Logger
fatalLogger *log.Logger
}

func (l defaultLogger) Infof(format string, args ...interface{}) {
slog.Info(format, args...)
}

func (l defaultLogger) Errorf(format string, args ...interface{}) {
l.errorLogger.Printf(format, args...)
}

func (l defaultLogger) Fatalf(format string, args ...interface{}) {
l.fatalLogger.Fatalf(format, args...)
}

func (l defaultLogger) Info(args ...interface{}) {
l.infoLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Error(args ...interface{}) {
l.errorLogger.Println(fmt.Sprint(args...))
}

func (l defaultLogger) Fatal(args ...interface{}) {
l.fatalLogger.Println(fmt.Sprint(args...))
}

0 comments on commit 5bf556c

Please sign in to comment.