logger.go 1.7 KB

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