Skip to content

Commit

Permalink
Merge pull request #61 from skit-ai/slog-interface
Browse files Browse the repository at this point in the history
Slog Interface
  • Loading branch information
sreeram-narayanan authored Aug 8, 2023
2 parents 4860ebf + 0b675a5 commit 3be4ea3
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 35 deletions.
78 changes: 43 additions & 35 deletions log/slog/slog.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,27 @@ import (
)

type loggerWrapper struct {
logger log.Logger
logger log.Logger
}

const defaultMsgKey = "msg"
const defaultErrKey = "error"
var defaultLoggerWrapper *loggerWrapper

var (
defaultLoggerWrapper *loggerWrapper
logLevel string
)

func init() {
logLevel := env.String("LOG_LEVEL", "info")
logLevel = env.String("LOG_LEVEL", "info")
defaultLoggerWrapper = newloggerWrapper(logLevel)
}

// NewLogger returns a new instance of Logger.
func NewLogger() Logger {
return newloggerWrapper(logLevel)
}

func newloggerWrapper(logLevel string) *loggerWrapper {
logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
logger = level.NewFilter(logger, levelFilter(logLevel))
Expand Down Expand Up @@ -52,27 +61,26 @@ func levelFilter(logLevel string) level.Option {
}

func mapToSlice(m map[string]any) []any {
var args []any
for k, v := range m {
args = append(args, k, v)
}
return args
var args []any
for k, v := range m {
args = append(args, k, v)
}
return args
}


// Info logs a line with level info using the loggerWrapper instance.
func (l *loggerWrapper) Info(msg string, args ...any) {
level.Info(log.With(l.logger, defaultMsgKey, msg)).Log(args...)
level.Info(log.With(l.logger, defaultMsgKey, msg)).Log(args...)
}

// Warn logs a line with level warn using the loggerWrapper instance.
func (l *loggerWrapper) Warn(msg string, args ...any) {
level.Warn(log.With(l.logger, defaultMsgKey, msg)).Log(args...)
level.Warn(log.With(l.logger, defaultMsgKey, msg)).Log(args...)
}

// Debug logs a line with level debug using a loggerWrapper instance.
func (l *loggerWrapper) Debug(msg string, args ...any) {
level.Debug(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
level.Debug(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
}

// Error logs a line with level error using a loggerWrapper instance.
Expand All @@ -88,22 +96,22 @@ func (l *loggerWrapper) Error(err error, msg string, args ...any) {
return
}

level.Error(log.With(l.logger, defaultMsgKey, msg, defaultErrKey, err.Error())).Log(args...)
level.Error(log.With(l.logger, defaultMsgKey, msg, defaultErrKey, err.Error())).Log(args...)
}

// Infof logs a format line with level info using the loggerWrapper instance.
func (l *loggerWrapper) Infof(format string, args ...any) {
level.Info(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Info(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Warnf logs a format line with level warn using the loggerWrapper instance.
func (l *loggerWrapper) Warnf(format string, args ...any) {
level.Warn(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Warn(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Debugf logs a format line with level debug using the loggerWrapper instance.
func (l *loggerWrapper) Debugf(format string, args ...any) {
level.Debug(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Debug(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Errorf logs a format line with level error using a loggerWrapper instance.
Expand All @@ -119,23 +127,23 @@ func (l *loggerWrapper) Errorf(err error, format string, args ...any) {
return
}

level.Error(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...), defaultErrKey, err.Error())
level.Error(l.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...), defaultErrKey, err.Error())
}

// WithTraceId returns a pointer to updated loggerWrapper with trace_id attached to the logger.
func (l *loggerWrapper) WithTraceId(ctx context.Context) *loggerWrapper {
traceId := instruments.ExtractTraceID(ctx)
logger := log.With(l.logger, "trace_id", traceId)
func (l *loggerWrapper) WithTraceId(ctx context.Context) Logger {
traceId := instruments.ExtractTraceID(ctx)
logger := log.With(l.logger, "trace_id", traceId)

return &loggerWrapper{
logger: logger,
}
}

// WithFields returns a pointer to updated loggerWrapper with custom fields attached to the logger.
func (l *loggerWrapper) WithFields(fields map[string]any) *loggerWrapper {
fieldArgs := mapToSlice(fields)
logger := log.With(l.logger, fieldArgs...)
func (l *loggerWrapper) WithFields(fields map[string]any) Logger {
fieldArgs := mapToSlice(fields)
logger := log.With(l.logger, fieldArgs...)

return &loggerWrapper{
logger: logger,
Expand All @@ -144,17 +152,17 @@ func (l *loggerWrapper) WithFields(fields map[string]any) *loggerWrapper {

// Info logs a line with level Info.
func Info(msg string, args ...any) {
level.Info(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
level.Info(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
}

// Warn logs a line with level warn.
func Warn(msg string, args ...any) {
level.Warn(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
level.Warn(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
}

// Debug logs a line with level debug.
func Debug(msg string, args ...any) {
level.Debug(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
level.Debug(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg)).Log(args...)
}

// Error logs a line with level error.
Expand All @@ -170,22 +178,22 @@ func Error(err error, msg string, args ...any) {
return
}

level.Error(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg, defaultErrKey, err.Error())).Log(args...)
level.Error(log.With(defaultLoggerWrapper.logger, defaultMsgKey, msg, defaultErrKey, err.Error())).Log(args...)
}

// Infof logs a format line with level info.
func Infof(format string, args ...any) {
level.Info(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Info(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Warnf logs a format line with level warn.
func Warnf(format string, args ...any) {
level.Warn(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Warn(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Debugf logs a format line with level debug.
func Debugf(format string, args ...any) {
level.Debug(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
level.Debug(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...))
}

// Errorf logs a format line with level error.
Expand All @@ -201,20 +209,20 @@ func Errorf(err error, format string, args ...any) {
return
}

level.Error(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...), defaultErrKey, err.Error())
level.Error(defaultLoggerWrapper.logger).Log(defaultMsgKey, fmt.Sprintf(format, args...), defaultErrKey, err.Error())
}

// WithFields returns WithFields using the defaultLoggerWrapper.
func WithFields(fields map[string]any) *loggerWrapper {
func WithFields(fields map[string]any) Logger {
return defaultLoggerWrapper.WithFields(fields)
}

// WithTraceId returns WithTraceId using the defaultLoggerWrapper.
func WithTraceId(ctx context.Context) *loggerWrapper {
func WithTraceId(ctx context.Context) Logger {
return defaultLoggerWrapper.WithTraceId(ctx)
}

// GetLogger returns the default instance of logfmt logger
func GetLogger() log.Logger {
// DefaultLogger returns the default instance of logfmt logger
func DefaultLogger() log.Logger {
return defaultLoggerWrapper.logger
}
17 changes: 17 additions & 0 deletions log/slog/slogger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package slog

import "context"

// Logger represents the methods supported by slog
type Logger interface {
Info(msg string, args ...any)
Warn(msg string, args ...any)
Debug(msg string, args ...any)
Error(err error, msg string, args ...any)
Infof(format string, args ...any)
Warnf(format string, args ...any)
Debugf(format string, args ...any)
Errorf(err error, format string, args ...any)
WithTraceId(ctx context.Context) Logger
WithFields(fields map[string]any) Logger
}

0 comments on commit 3be4ea3

Please sign in to comment.