logger.go raw

   1  // Copyright 2022 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  //go:build go1.21
   6  
   7  package slog
   8  
   9  import (
  10  	"context"
  11  	"log"
  12  	"log/slog"
  13  )
  14  
  15  // Default returns the default Logger.
  16  func Default() *Logger { return slog.Default() }
  17  
  18  // SetDefault makes l the default Logger.
  19  // After this call, output from the log package's default Logger
  20  // (as with [log.Print], etc.) will be logged at LevelInfo using l's Handler.
  21  func SetDefault(l *Logger) {
  22  	slog.SetDefault(l)
  23  }
  24  
  25  // A Logger records structured information about each call to its
  26  // Log, Debug, Info, Warn, and Error methods.
  27  // For each call, it creates a Record and passes it to a Handler.
  28  //
  29  // To create a new Logger, call [New] or a Logger method
  30  // that begins "With".
  31  type Logger = slog.Logger
  32  
  33  // New creates a new Logger with the given non-nil Handler.
  34  func New(h Handler) *Logger {
  35  	return slog.New(h)
  36  }
  37  
  38  // With calls Logger.With on the default logger.
  39  func With(args ...any) *Logger {
  40  	return slog.With(args...)
  41  }
  42  
  43  // NewLogLogger returns a new log.Logger such that each call to its Output method
  44  // dispatches a Record to the specified handler. The logger acts as a bridge from
  45  // the older log API to newer structured logging handlers.
  46  func NewLogLogger(h Handler, level Level) *log.Logger {
  47  	return slog.NewLogLogger(h, level)
  48  }
  49  
  50  // Debug calls Logger.Debug on the default logger.
  51  func Debug(msg string, args ...any) {
  52  	slog.Debug(msg, args...)
  53  }
  54  
  55  // DebugContext calls Logger.DebugContext on the default logger.
  56  func DebugContext(ctx context.Context, msg string, args ...any) {
  57  	slog.DebugContext(ctx, msg, args...)
  58  }
  59  
  60  // Info calls Logger.Info on the default logger.
  61  func Info(msg string, args ...any) {
  62  	slog.Info(msg, args...)
  63  }
  64  
  65  // InfoContext calls Logger.InfoContext on the default logger.
  66  func InfoContext(ctx context.Context, msg string, args ...any) {
  67  	slog.InfoContext(ctx, msg, args...)
  68  }
  69  
  70  // Warn calls Logger.Warn on the default logger.
  71  func Warn(msg string, args ...any) {
  72  	slog.Warn(msg, args...)
  73  }
  74  
  75  // WarnContext calls Logger.WarnContext on the default logger.
  76  func WarnContext(ctx context.Context, msg string, args ...any) {
  77  	slog.WarnContext(ctx, msg, args...)
  78  }
  79  
  80  // Error calls Logger.Error on the default logger.
  81  func Error(msg string, args ...any) {
  82  	slog.Error(msg, args...)
  83  }
  84  
  85  // ErrorContext calls Logger.ErrorContext on the default logger.
  86  func ErrorContext(ctx context.Context, msg string, args ...any) {
  87  	slog.ErrorContext(ctx, msg, args...)
  88  }
  89  
  90  // Log calls Logger.Log on the default logger.
  91  func Log(ctx context.Context, level Level, msg string, args ...any) {
  92  	slog.Log(ctx, level, msg, args...)
  93  }
  94  
  95  // LogAttrs calls Logger.LogAttrs on the default logger.
  96  func LogAttrs(ctx context.Context, level Level, msg string, attrs ...Attr) {
  97  	slog.LogAttrs(ctx, level, msg, attrs...)
  98  }
  99