mirror of https://github.com/databricks/cli.git
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
|
package log
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"runtime"
|
||
|
"time"
|
||
|
|
||
|
"golang.org/x/exp/slog"
|
||
|
)
|
||
|
|
||
|
// GetLogger returns either the logger configured on the context,
|
||
|
// or the global logger if one isn't defined.
|
||
|
func GetLogger(ctx context.Context) *slog.Logger {
|
||
|
logger, ok := FromContext(ctx)
|
||
|
if !ok {
|
||
|
logger = slog.Default()
|
||
|
}
|
||
|
return logger
|
||
|
}
|
||
|
|
||
|
// helper function to abstract logging a string message.
|
||
|
func log(logger *slog.Logger, ctx context.Context, level slog.Level, msg string) {
|
||
|
var pcs [1]uintptr
|
||
|
// skip [runtime.Callers, this function, this function's caller].
|
||
|
runtime.Callers(3, pcs[:])
|
||
|
r := slog.NewRecord(time.Now(), level, msg, pcs[0])
|
||
|
if ctx == nil {
|
||
|
ctx = context.Background()
|
||
|
}
|
||
|
_ = logger.Handler().Handle(ctx, r)
|
||
|
}
|
||
|
|
||
|
// Tracef logs a formatted string using the context-local or global logger.
|
||
|
func Tracef(ctx context.Context, format string, v ...any) {
|
||
|
logger := GetLogger(ctx)
|
||
|
if !logger.Enabled(ctx, LevelTrace) {
|
||
|
return
|
||
|
}
|
||
|
log(logger, ctx, LevelTrace, fmt.Sprintf(format, v...))
|
||
|
}
|
||
|
|
||
|
// Debugf logs a formatted string using the context-local or global logger.
|
||
|
func Debugf(ctx context.Context, format string, v ...any) {
|
||
|
logger := GetLogger(ctx)
|
||
|
if !logger.Enabled(ctx, LevelDebug) {
|
||
|
return
|
||
|
}
|
||
|
log(logger, ctx, LevelDebug, fmt.Sprintf(format, v...))
|
||
|
}
|
||
|
|
||
|
// Infof logs a formatted string using the context-local or global logger.
|
||
|
func Infof(ctx context.Context, format string, v ...any) {
|
||
|
logger := GetLogger(ctx)
|
||
|
if !logger.Enabled(ctx, LevelInfo) {
|
||
|
return
|
||
|
}
|
||
|
log(logger, ctx, LevelInfo, fmt.Sprintf(format, v...))
|
||
|
}
|
||
|
|
||
|
// Warnf logs a formatted string using the context-local or global logger.
|
||
|
func Warnf(ctx context.Context, format string, v ...any) {
|
||
|
logger := GetLogger(ctx)
|
||
|
if !logger.Enabled(ctx, LevelWarn) {
|
||
|
return
|
||
|
}
|
||
|
log(logger, ctx, LevelWarn, fmt.Sprintf(format, v...))
|
||
|
}
|
||
|
|
||
|
// Errorf logs a formatted string using the context-local or global logger.
|
||
|
func Errorf(ctx context.Context, format string, v ...any) {
|
||
|
logger := GetLogger(ctx)
|
||
|
if !logger.Enabled(ctx, LevelError) {
|
||
|
return
|
||
|
}
|
||
|
log(logger, ctx, LevelError, fmt.Sprintf(format, v...))
|
||
|
}
|