logger.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package logger
  2. import (
  3. "io"
  4. "log/slog"
  5. "os"
  6. "strings"
  7. )
  8. import (
  9. "gopkg.in/natefinch/lumberjack.v2"
  10. )
  11. import (
  12. "resource-server/common"
  13. )
  14. var lumberJackLogger *lumberjack.Logger
  15. var logger *slog.Logger
  16. func SetupLogger(persisted bool) {
  17. //设置日志级别
  18. var level = new(slog.LevelVar)
  19. switch common.LoggerConfig.LogLevel {
  20. case "DEBUG":
  21. level.Set(slog.LevelDebug)
  22. case "INFO":
  23. level.Set(slog.LevelInfo)
  24. case "WARN":
  25. level.Set(slog.LevelWarn)
  26. case "ERROR":
  27. level.Set(slog.LevelError)
  28. default:
  29. level.Set(slog.LevelInfo)
  30. }
  31. opts := &slog.HandlerOptions{
  32. Level: level,
  33. AddSource: true,
  34. }
  35. filename := common.LoggerConfig.LogDir + "/resource.log"
  36. if strings.HasSuffix(common.LoggerConfig.LogDir, "/") {
  37. filename = common.LoggerConfig.LogDir + "resource.log"
  38. }
  39. file, err := os.Create(filename)
  40. if err != nil {
  41. panic(err)
  42. }
  43. if err := file.Close(); err != nil {
  44. panic(err)
  45. }
  46. lumberJackLogger = &lumberjack.Logger{
  47. Filename: filename, //日志文件的位置
  48. MaxSize: common.LoggerConfig.MaxSize, //在进行切割之前,日志文件的最大大小(以MB为单位)
  49. MaxBackups: common.LoggerConfig.MaxBackups, //最多保留文件个数
  50. MaxAge: common.LoggerConfig.MaxAge, //保留旧文件的最大天数
  51. Compress: common.LoggerConfig.Compress, //是否压缩/归档旧文件
  52. LocalTime: true,
  53. }
  54. if persisted {
  55. if common.LoggerConfig.Stdout {
  56. logger = slog.New(slog.NewJSONHandler(io.MultiWriter(lumberJackLogger, os.Stdout), opts))
  57. } else {
  58. logger = slog.New(slog.NewJSONHandler(lumberJackLogger, opts))
  59. }
  60. } else {
  61. logger = slog.New(slog.NewJSONHandler(os.Stdout, opts))
  62. }
  63. slog.SetDefault(logger)
  64. //todo 输出到robot
  65. slog.Info("setup logger ok",
  66. "level", level.String(),
  67. "filename", filename,
  68. "max size", common.LoggerConfig.MaxSize,
  69. "max backups", common.LoggerConfig.MaxBackups,
  70. "max age", common.LoggerConfig.MaxAge,
  71. "compress", common.LoggerConfig.Compress,
  72. )
  73. }
  74. func ShutdownLogger() {
  75. lumberJackLogger.Rotate()
  76. }
  77. func WithGroup(name string) *slog.Logger {
  78. return logger.WithGroup(name)
  79. }
  80. func With(args ...any) *slog.Logger {
  81. return logger.With(args)
  82. }