Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ type ILogger interface {
Warn(ctx context.Context, msg string, fields Fields)
Error(ctx context.Context, msg string, err error, fields Fields)
Debug(ctx context.Context, msg string, fields Fields)

// Enabled reports whether logging is active.
// Use to short-circuit expensive log-arg construction:
//
// if logger.Enabled() {
// logger.Info(ctx, expensiveFunc(), fields)
// }
Enabled() bool
}

func Initialize(loggerInstance ILogger) {
Expand Down
4 changes: 4 additions & 0 deletions lib/logger/no-op.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ func (n NoOpLogger) Warn(ctx context.Context, msg string, fields Fields) {}
func (n NoOpLogger) Error(ctx context.Context, msg string, err error, fields Fields) {}

func (n NoOpLogger) Debug(ctx context.Context, msg string, fields Fields) {}

func (n NoOpLogger) Enabled() bool {
return false
}
36 changes: 30 additions & 6 deletions service/utils/zerolog.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import (
)

type ZeroLog struct {
logger zerolog.Logger
logger zerolog.Logger
enabled bool
}

var (
Expand All @@ -26,8 +27,13 @@ func NewZeroLogger() ZeroLog {

zerolog.SetGlobalLevel(zerolog.DebugLevel)

// ESPRESSO_LOG_ENABLED defaults to true. Set to "false" to disable all logging.
// Note: The env var is read once at initialization; changes after process start are not reflected.
enabled := os.Getenv("ESPRESSO_LOG_ENABLED") != "false"

zeroLog := ZeroLog{
logger: log.Logger,
logger: log.Logger,
enabled: enabled,
}

Logger = zeroLog
Expand All @@ -43,18 +49,36 @@ func addFields(event *zerolog.Event, fields map[string]any) *zerolog.Event {
return event
}

func (l ZeroLog) logIfEnabled(fn func()) {
if l.enabled {
fn()
}
}

func (l ZeroLog) Info(ctx context.Context, msg string, fields customLogger.Fields) {
addFields(l.logger.Info(), fields).Msg(msg)
l.logIfEnabled(func() {
addFields(l.logger.Info(), fields).Msg(msg)
})
}

func (l ZeroLog) Warn(ctx context.Context, msg string, fields customLogger.Fields) {
addFields(l.logger.Warn(), fields).Msg(msg)
l.logIfEnabled(func() {
addFields(l.logger.Warn(), fields).Msg(msg)
})
}

func (l ZeroLog) Error(ctx context.Context, msg string, err error, fields customLogger.Fields) {
addFields(l.logger.Err(err), fields).Msg(msg)
l.logIfEnabled(func() {
addFields(l.logger.Err(err), fields).Msg(msg)
})
}

func (l ZeroLog) Debug(ctx context.Context, msg string, fields customLogger.Fields) {
addFields(l.logger.Debug(), fields).Msg(msg)
l.logIfEnabled(func() {
addFields(l.logger.Debug(), fields).Msg(msg)
})
}

func (l ZeroLog) Enabled() bool {
return l.enabled
}