ai-gateway/common/logger/logger.go

109 lines
2.4 KiB
Go
Raw Normal View History

package logger
2023-04-22 12:39:27 +00:00
import (
2023-09-17 07:39:46 +00:00
"context"
2023-04-22 12:39:27 +00:00
"fmt"
"github.com/gin-gonic/gin"
"io"
"log"
"os"
"path/filepath"
"sync"
2023-04-22 12:39:27 +00:00
"time"
)
2023-09-17 07:39:46 +00:00
const (
loggerDEBUG = "DEBUG"
2023-09-17 07:39:46 +00:00
loggerINFO = "INFO"
loggerWarn = "WARN"
loggerError = "ERR"
)
var setupLogLock sync.Mutex
var setupLogWorking bool
func SetupLogger() {
if LogDir != "" {
ok := setupLogLock.TryLock()
if !ok {
log.Println("setup log is already working")
return
}
defer func() {
setupLogLock.Unlock()
setupLogWorking = false
}()
logPath := filepath.Join(LogDir, fmt.Sprintf("oneapi-%s.log", time.Now().Format("20060102")))
2023-09-17 07:39:46 +00:00
fd, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
2023-04-22 12:39:27 +00:00
if err != nil {
log.Fatal("failed to open log file")
}
2023-09-17 07:39:46 +00:00
gin.DefaultWriter = io.MultiWriter(os.Stdout, fd)
gin.DefaultErrorWriter = io.MultiWriter(os.Stderr, fd)
2023-04-22 12:39:27 +00:00
}
}
func SysLog(s string) {
t := time.Now()
_, _ = fmt.Fprintf(gin.DefaultWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
}
func SysError(s string) {
t := time.Now()
_, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
}
func Debug(ctx context.Context, msg string) {
logHelper(ctx, loggerDEBUG, msg)
}
func Info(ctx context.Context, msg string) {
2023-09-17 07:39:46 +00:00
logHelper(ctx, loggerINFO, msg)
}
func Warn(ctx context.Context, msg string) {
2023-09-17 07:39:46 +00:00
logHelper(ctx, loggerWarn, msg)
}
func Error(ctx context.Context, msg string) {
2023-09-17 07:39:46 +00:00
logHelper(ctx, loggerError, msg)
}
func Debugf(ctx context.Context, format string, a ...any) {
Debug(ctx, fmt.Sprintf(format, a...))
}
func Infof(ctx context.Context, format string, a ...any) {
Info(ctx, fmt.Sprintf(format, a...))
}
func Warnf(ctx context.Context, format string, a ...any) {
Warn(ctx, fmt.Sprintf(format, a...))
}
func Errorf(ctx context.Context, format string, a ...any) {
Error(ctx, fmt.Sprintf(format, a...))
}
2023-09-17 07:39:46 +00:00
func logHelper(ctx context.Context, level string, msg string) {
writer := gin.DefaultErrorWriter
if level == loggerINFO {
writer = gin.DefaultWriter
}
id := ctx.Value(RequestIdKey)
now := time.Now()
_, _ = fmt.Fprintf(writer, "[%s] %v | %s | %s \n", level, now.Format("2006/01/02 - 15:04:05"), id, msg)
if !setupLogWorking {
setupLogWorking = true
go func() {
SetupLogger()
}()
}
2023-09-17 07:39:46 +00:00
}
2023-04-22 12:39:27 +00:00
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)
}