logger.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package common
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "io"
  7. "log"
  8. "os"
  9. "path/filepath"
  10. "time"
  11. )
  12. const (
  13. loggerINFO = "INFO"
  14. loggerWarn = "WARN"
  15. loggerError = "ERR"
  16. )
  17. func SetupGinLog() {
  18. if *LogDir != "" {
  19. logPath := filepath.Join(*LogDir, fmt.Sprintf("oneapi-%s.log", time.Now().Format("20060102150405")))
  20. fd, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
  21. if err != nil {
  22. log.Fatal("failed to open log file")
  23. }
  24. gin.DefaultWriter = io.MultiWriter(os.Stdout, fd)
  25. gin.DefaultErrorWriter = io.MultiWriter(os.Stderr, fd)
  26. }
  27. }
  28. func SysLog(s string) {
  29. t := time.Now()
  30. _, _ = fmt.Fprintf(gin.DefaultWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
  31. }
  32. func SysError(s string) {
  33. t := time.Now()
  34. _, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
  35. }
  36. func LogInfo(ctx context.Context, msg string) {
  37. logHelper(ctx, loggerINFO, msg)
  38. }
  39. func LogWarn(ctx context.Context, msg string) {
  40. logHelper(ctx, loggerWarn, msg)
  41. }
  42. func LogError(ctx context.Context, msg string) {
  43. logHelper(ctx, loggerError, msg)
  44. }
  45. func logHelper(ctx context.Context, level string, msg string) {
  46. writer := gin.DefaultErrorWriter
  47. if level == loggerINFO {
  48. writer = gin.DefaultWriter
  49. }
  50. id := ctx.Value(RequestIdKey)
  51. now := time.Now()
  52. _, _ = fmt.Fprintf(writer, "[%s] %v | %s | %s \n", level, now.Format("2006/01/02 - 15:04:05"), id, msg)
  53. }
  54. func FatalLog(v ...any) {
  55. t := time.Now()
  56. _, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[FATAL] %v | %v \n", t.Format("2006/01/02 - 15:04:05"), v)
  57. os.Exit(1)
  58. }
  59. func LogQuota(quota int) string {
  60. if DisplayInCurrencyEnabled {
  61. return fmt.Sprintf("$%.6f 额度", float64(quota)/QuotaPerUnit)
  62. } else {
  63. return fmt.Sprintf("%d 点额度", quota)
  64. }
  65. }