Skip to content

Commit

Permalink
Merge pull request #56 from skit-ai/lamba/logfmt
Browse files Browse the repository at this point in the history
add: support for logfmt
  • Loading branch information
ydlamba authored Jun 14, 2023
2 parents cb1efd2 + 75b4e1d commit 8ee3819
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 4 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
github.com/Vernacular-ai/gorm v1.11.3
github.com/aws/aws-sdk-go v1.44.153
github.com/getsentry/sentry-go v0.15.0
github.com/go-kit/log v0.2.1
github.com/google/go-cmp v0.5.9
github.com/hashicorp/go-getter v1.6.2
github.com/hashicorp/vault/api v1.8.2
Expand Down Expand Up @@ -37,6 +38,7 @@ require (
github.com/cenkalti/backoff/v4 v4.2.0 // indirect
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect
Expand Down
6 changes: 4 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
github.com/aws/aws-sdk-go v1.44.153 h1:KfN5URb9O/Fk48xHrAinrPV2DzPcLa0cd9yo1ax5KGg=
github.com/aws/aws-sdk-go v1.44.153/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.180 h1:VLZuAHI9fa/3WME5JjpVjcPCNfpGHVMiHx8sLHWhMgI=
github.com/aws/aws-sdk-go v1.44.180/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
Expand Down Expand Up @@ -135,9 +133,13 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
Expand Down
80 changes: 78 additions & 2 deletions log/levels.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package log

import (
"context"
"fmt"
"github.com/skit-ai/vcore/errors"
"log"
"strings"

kitLog "github.com/go-kit/log"
kitLevel "github.com/go-kit/log/level"
"github.com/skit-ai/vcore/errors"
"github.com/skit-ai/vcore/instruments"
)

const (
Expand All @@ -19,7 +24,12 @@ type Logger struct {
level int
}

var defaultLogger = Logger{WARN}
var (
// Legacy logger
defaultLogger = Logger{WARN}
// Logfmt logger
KitLogger = kitLog.NewNopLogger()
)

// Prefix based on the log level to be added to every log statement
func levelPrefix(level int) string {
Expand Down Expand Up @@ -171,48 +181,114 @@ func (logger *Logger) Error(err error, args ...interface{}) {
// Methods to log a message using the default logger without a format

func Trace(args ...interface{}) {
if KitLogger != nil {
// When logfmt is enabled, level trace becomes debug
kitLevel.Debug(KitLogger).Log(args...)
return
}
defaultLogger.Trace(args...)
}

func Debug(args ...interface{}) {
if KitLogger != nil {
kitLevel.Debug(KitLogger).Log(args...)
return
}
defaultLogger.Debug(args...)
}

func Info(args ...interface{}) {
if KitLogger != nil {
kitLevel.Info(KitLogger).Log(args...)
return
}
defaultLogger.Info(args...)
}

func Warn(args ...interface{}) {
if KitLogger != nil {
kitLevel.Warn(KitLogger).Log(args...)
return
}
defaultLogger.Warn(args...)
}

func Error(err error, args ...interface{}) {
if KitLogger != nil {
kitLevel.Error(KitLogger).Log(args...)
return
}
defaultLogger.Error(err, args...)
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Methods to log messages using the default logger with a format

// TODO: remove format methods
func Tracef(format string, args ...interface{}) {
if KitLogger != nil {
// When logfmt is enabled, level trace becomes debug
kitLevel.Debug(KitLogger).Log(fmt.Sprintf(format, args...))
return
}
defaultLogger.Tracef(format, args...)
}

func Debugf(format string, args ...interface{}) {
if KitLogger != nil {
kitLevel.Debug(KitLogger).Log(fmt.Sprintf(format, args...))
return
}
defaultLogger.Debugf(format, args...)
}

func Infof(format string, args ...interface{}) {
if KitLogger != nil {
kitLevel.Info(KitLogger).Log(fmt.Sprintf(format, args...))
return
}
defaultLogger.Infof(format, args...)
}

func Warnf(format string, args ...interface{}) {
if KitLogger != nil {
kitLevel.Warn(KitLogger).Log(fmt.Sprintf(format, args...))
return
}
defaultLogger.Warnf(format, args...)
}

func Errorf(err error, format string, args ...interface{}) {
if KitLogger != nil {
kitLevel.Error(KitLogger).Log(fmt.Sprintf(format, args...))
return
}
defaultLogger.Errorf(err, format, args...)
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Methods to log messages using the logfomt logger with a trace_id

func DebugWithTrace(ctx context.Context, args ...interface{}) {
args = append([]any{"trace_id", instruments.ExtractTraceID(ctx).String()}, args...)
kitLevel.Debug(KitLogger).Log(args...)
}

func InfoWithTrace(ctx context.Context, args ...interface{}) {
args = append([]any{"trace_id", instruments.ExtractTraceID(ctx).String()}, args...)
kitLevel.Info(KitLogger).Log(args...)
}

func WarnWithTrace(ctx context.Context, args ...interface{}) {
args = append([]any{"trace_id", instruments.ExtractTraceID(ctx).String()}, args...)
kitLevel.Warn(KitLogger).Log(args...)
}

func ErrorWithTrace(ctx context.Context, args ...interface{}) {
args = append([]any{"trace_id", instruments.ExtractTraceID(ctx).String()}, args...)
kitLevel.Error(KitLogger).Log(args...)
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Expand Down
52 changes: 52 additions & 0 deletions log/logfmt.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package log

import (
"fmt"
"os"

"github.com/go-kit/log"
"github.com/go-kit/log/level"
)

// InitLogfmtLogger initialises the global gokit logger and overrides the
// default logger for the server.
func InitLogfmtLogger() {
logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
// Using legacy logger's level for level filtering
logger = level.NewFilter(logger, LevelFilter(defaultLogger.level))
logger = log.With(logger, "ts", log.DefaultTimestampUTC)
KitLogger = log.With(logger, "caller", log.Caller(4))
}

// CheckFatal prints an error and exits with error code 1 if err is non-nil.
func CheckFatal(location string, err error) {
if err == nil {
return
}

logger := level.Error(KitLogger)
if location != "" {
logger = log.With(logger, "msg", "error "+location)
}
// %+v gets the stack trace from errors using github.com/pkg/errors
errStr := fmt.Sprintf("%+v", err)
fmt.Fprintln(os.Stderr, errStr)

logger.Log("err", errStr)
os.Exit(1)
}

func LevelFilter(l int) level.Option {
switch l {
case DEBUG:
return level.AllowDebug()
case INFO:
return level.AllowInfo()
case WARN:
return level.AllowWarn()
case ERROR:
return level.AllowError()
default:
return level.AllowAll()
}
}

0 comments on commit 8ee3819

Please sign in to comment.