You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
crate/log/log.go

163 lines
4.7 KiB
Go

// log 实现了全局的日志处理
//
// 这个包里定义的函数都是对全局的 [logsdk.Logger] 对象的封装.
// 全局的 Logger 不能重新赋值,
// Logger 的配置方法和日志方法可以并发调用.
package log
import (
"context"
"fmt"
"time"
"git.blauwelle.com/go/crate/log/logsdk"
)
type (
Level = logsdk.Level
)
const (
LevelPanic = logsdk.LevelPanic
LevelFatal = logsdk.LevelFatal
LevelError = logsdk.LevelError
LevelWarn = logsdk.LevelWarn
LevelInfo = logsdk.LevelInfo
LevelDebug = logsdk.LevelDebug
LevelTrace = logsdk.LevelTrace
)
// Field 返回键值对
func Field(key string, value any) logsdk.KV {
return logsdk.KV{
Value: value,
Key: key,
}
}
// AddCallerSkip 增加调用 [runtime.Callers] 时的 skip 参数,
// 当通过装饰器等方式封装 Entry 导致增加调用 Entry 方法的深度时使用 AddCallerSkip 调整 skip,
// 直接在需要日志的地方调用 Entry 的方法时不需要 AddCallerSkip.
func AddCallerSkip(n int) logsdk.Entry {
return globalLogger.AddCallerSkip(n)
}
// WithField 增加1组键值对
func WithField(key string, value any) logsdk.Entry {
return globalLogger.WithField(key, value)
}
// WithFields 增加键值对
func WithFields(fields ...logsdk.KV) logsdk.Entry {
return globalLogger.WithFields(fields...)
}
// WithTime 设置日志的时间,
// Entry 默认使用调用 Log 等最终方法的时间作为日志的时间.
func WithTime(t time.Time) logsdk.Entry {
return globalLogger.WithTime(t)
}
// WithReportCaller 设置 [logsdk.Entry] 是否收集调用记录
func WithReportCaller(reportCaller bool) logsdk.Entry {
return globalLogger.WithReportCaller(reportCaller)
}
// WithReportStack 设置 [logsdk.Entry] 是否收集调用栈
func WithReportStack(reportStack bool) logsdk.Entry {
return globalLogger.WithReportStack(reportStack)
}
// Log 输出日志
func Log(ctx context.Context, level Level, args ...any) {
globalLogger.AddCallerSkip(1).Log(ctx, level, fmt.Sprint(args...))
}
// Trace 输出 LevelTrace 等级的日志
func Trace(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Trace(ctx, args...)
}
// Debug 输出 LevelDebug 等级的日志
func Debug(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Debug(ctx, args...)
}
// Info 输出 LevelInfo 等级的日志
func Info(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Info(ctx, args...)
}
// Warn 输出 LevelWarn 等级的日志
func Warn(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Warn(ctx, args...)
}
// Error 输出 LevelError 等级的日志
func Error(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Error(ctx, args...)
}
// Fatal 输出 LevelFatal 等级的日志并调用 Logger.Exit
func Fatal(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Fatal(ctx, args...)
}
// Panic 输出 LevelPanic 等级的日志后执行 panic,
// 即使 Logger 日志等级高于 LevelPanic 也会 panic.
func Panic(ctx context.Context, args ...any) {
globalLogger.AddCallerSkip(1).Panic(ctx, args...)
}
// Logf 格式化输出日志
func Logf(ctx context.Context, level Level, format string, args ...any) {
globalLogger.AddCallerSkip(1).Logf(ctx, level, format, args...)
}
// Tracef 格式化输出 LevelTrace 等级的日志
func Tracef(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Tracef(ctx, format, args...)
}
// Debugf 格式化输出 LevelDebug 等级的日志
func Debugf(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Debugf(ctx, format, args...)
}
// Infof 格式化输出 LevelInfo 等级的日志
func Infof(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Infof(ctx, format, args...)
}
// Warnf 格式化输出 LevelWarn 等级的日志
func Warnf(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Warnf(ctx, format, args...)
}
// Errorf 格式化输出 LevelError 等级的日志
func Errorf(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Errorf(ctx, format, args...)
}
// Fatalf 格式化输出 LevelFatal 等级的日志并调用 Logger.Exit
func Fatalf(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Fatalf(ctx, format, args...)
}
// Panicf 格式化输出 LevelPanic 等级的日志
func Panicf(ctx context.Context, format string, args ...any) {
globalLogger.AddCallerSkip(1).Panicf(ctx, format, args...)
}
// Exit 调用全局 logger 的 Exit
func Exit(code int) {
globalLogger.Exit(code)
}
// Logger 返回全局 logger, 通常用来在程序启动时对全局 logger 进行配置,
// 业务代码处理日志时直接使用这个包里定义的日志函数.
func Logger() *logsdk.Logger {
return globalLogger
}