Files
vRp.CD2g_test/utils/log/default.go
T

81 lines
2.7 KiB
Go

package log
import (
"context"
"errors"
"log/slog"
"os"
"sync/atomic"
"time"
)
var logger = func() *atomic.Pointer[Logger] {
var p atomic.Pointer[Logger]
p.Store(NewLogger(NewHandler(os.Stdout, NewOptions())))
return &p
}()
// Default 获取默认的日志记录器
func Default() *Logger {
return logger.Load()
}
// SetDefault 设置默认的日志记录器
func SetDefault(l *Logger) {
logger.Store(l)
}
// SetDefaultBySlog 设置默认的日志记录器
func SetDefaultBySlog(l *slog.Logger) {
logger.Store(&Logger{Logger: l})
}
// Debug 在 DebugLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
func Debug(msg string, args ...any) {
handle(DebugLevel, msg, args...)
}
// Info 在 InfoLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
func Info(msg string, args ...any) {
handle(InfoLevel, msg, args...)
}
// Warn 在 WarnLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
func Warn(msg string, args ...any) {
handle(WarnLevel, msg, args...)
}
// Error 在 ErrorLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
func Error(msg string, args ...any) {
handle(ErrorLevel, msg, args...)
}
// DPanic 在 DPanicLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
// - 如果记录器处于开发模式,它就会出现 panic(DPanic 的意思是“development panic”)。这对于捕获可恢复但不应该发生的错误很有用
// - 该 panic 仅在 NewHandler 中创建的处理器会生效
func DPanic(msg string, args ...any) {
handle(DPanicLevel, msg, args...)
}
// Panic 在 PanicLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
// - 即使禁用了 PanicLevel 的日志记录,记录器也会出现 panic
func Panic(msg string, args ...any) {
handle(PanicLevel, msg, args...)
panic(errors.New(msg))
}
// Fatal 在 FatalLevel 记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
// - 然后记录器调用 os.Exit(1),即使 FatalLevel 的日志记录被禁用
func Fatal(msg string, args ...any) {
handle(FatalLevel, msg, args...)
os.Exit(1)
}
// handle 在指定的级别记录一条消息。该消息包括在日志站点传递的任何字段以及记录器上累积的任何字段
func handle(level slog.Level, msg string, args ...any) {
d := Default()
r := slog.NewRecord(time.Now(), level, msg, 0)
r.Add(args...)
_ = d.Handler().Handle(context.Background(), r)
}