mirror of
				https://github.com/songquanpeng/one-api.git
				synced 2025-11-04 15:53:42 +08:00 
			
		
		
		
	feat: update logger
This commit is contained in:
		@@ -7,19 +7,25 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
 | 
			
		||||
	"github.com/songquanpeng/one-api/common/config"
 | 
			
		||||
	"github.com/songquanpeng/one-api/common/helper"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type loggerLevel string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	loggerDEBUG = "DEBUG"
 | 
			
		||||
	loggerINFO  = "INFO"
 | 
			
		||||
	loggerWarn  = "WARN"
 | 
			
		||||
	loggerError = "ERR"
 | 
			
		||||
	loggerDEBUG loggerLevel = "DEBUG"
 | 
			
		||||
	loggerINFO  loggerLevel = "INFO"
 | 
			
		||||
	loggerWarn  loggerLevel = "WARN"
 | 
			
		||||
	loggerError loggerLevel = "ERROR"
 | 
			
		||||
	loggerFatal loggerLevel = "FATAL"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var setupLogOnce sync.Once
 | 
			
		||||
@@ -44,27 +50,26 @@ func SetupLogger() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysLog(s string) {
 | 
			
		||||
	t := time.Now()
 | 
			
		||||
	_, _ = fmt.Fprintf(gin.DefaultWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
 | 
			
		||||
	logHelper(nil, loggerINFO, s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysLogf(format string, a ...any) {
 | 
			
		||||
	SysLog(fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(nil, loggerINFO, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysError(s string) {
 | 
			
		||||
	t := time.Now()
 | 
			
		||||
	_, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
 | 
			
		||||
	logHelper(nil, loggerError, s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysErrorf(format string, a ...any) {
 | 
			
		||||
	SysError(fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(nil, loggerError, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Debug(ctx context.Context, msg string) {
 | 
			
		||||
	if config.DebugEnabled {
 | 
			
		||||
		logHelper(ctx, loggerDEBUG, msg)
 | 
			
		||||
	if !config.DebugEnabled {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	logHelper(ctx, loggerDEBUG, msg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Info(ctx context.Context, msg string) {
 | 
			
		||||
@@ -80,37 +85,65 @@ func Error(ctx context.Context, msg string) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Debugf(ctx context.Context, format string, a ...any) {
 | 
			
		||||
	Debug(ctx, fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(ctx, loggerDEBUG, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Infof(ctx context.Context, format string, a ...any) {
 | 
			
		||||
	Info(ctx, fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(ctx, loggerINFO, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Warnf(ctx context.Context, format string, a ...any) {
 | 
			
		||||
	Warn(ctx, fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(ctx, loggerWarn, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Errorf(ctx context.Context, format string, a ...any) {
 | 
			
		||||
	Error(ctx, fmt.Sprintf(format, a...))
 | 
			
		||||
	logHelper(ctx, loggerError, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func logHelper(ctx context.Context, level string, msg string) {
 | 
			
		||||
func FatalLog(s string) {
 | 
			
		||||
	logHelper(nil, loggerFatal, s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func FatalLogf(format string, a ...any) {
 | 
			
		||||
	logHelper(nil, loggerFatal, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func logHelper(ctx context.Context, level loggerLevel, msg string) {
 | 
			
		||||
	writer := gin.DefaultErrorWriter
 | 
			
		||||
	if level == loggerINFO {
 | 
			
		||||
		writer = gin.DefaultWriter
 | 
			
		||||
	}
 | 
			
		||||
	id := ctx.Value(helper.RequestIdKey)
 | 
			
		||||
	if id == nil {
 | 
			
		||||
		id = helper.GenRequestID()
 | 
			
		||||
	var logId string
 | 
			
		||||
	if ctx != nil {
 | 
			
		||||
		rawLogId := ctx.Value(helper.RequestIdKey)
 | 
			
		||||
		if rawLogId != nil {
 | 
			
		||||
			logId = fmt.Sprintf(" | %s", rawLogId.(string))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	lineInfo, funcName := getLineInfo()
 | 
			
		||||
	now := time.Now()
 | 
			
		||||
	_, _ = fmt.Fprintf(writer, "[%s] %v | %s | %s \n", level, now.Format("2006/01/02 - 15:04:05"), id, msg)
 | 
			
		||||
	_, _ = fmt.Fprintf(writer, "[%s] %v%s%s %s%s \n", level, now.Format("2006/01/02 - 15:04:05"), logId, lineInfo, funcName, msg)
 | 
			
		||||
	SetupLogger()
 | 
			
		||||
	if level == loggerFatal {
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func FatalLog(v ...any) {
 | 
			
		||||
	t := time.Now()
 | 
			
		||||
	_, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[FATAL] %v | %v \n", t.Format("2006/01/02 - 15:04:05"), v)
 | 
			
		||||
	os.Exit(1)
 | 
			
		||||
func getLineInfo() (string, string) {
 | 
			
		||||
	funcName := "[unknown] "
 | 
			
		||||
	pc, file, line, ok := runtime.Caller(3)
 | 
			
		||||
	if ok {
 | 
			
		||||
		if fn := runtime.FuncForPC(pc); fn != nil {
 | 
			
		||||
			parts := strings.Split(fn.Name(), ".")
 | 
			
		||||
			funcName = "[" + parts[len(parts)-1] + "] "
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		file = "unknown"
 | 
			
		||||
		line = 0
 | 
			
		||||
	}
 | 
			
		||||
	parts := strings.Split(file, "one-api/")
 | 
			
		||||
	if len(parts) > 1 {
 | 
			
		||||
		file = parts[1]
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf(" | %s:%d", file, line), funcName
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user