logger.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. MaxAge: common.LoggerConfig.MaxAge, //保留旧文件的最大天数
  38. Compress: common.LoggerConfig.Compress, //是否压缩/归档旧文件
  39. LocalTime: true,
  40. }
  41. if persisted {
  42. if common.LoggerConfig.Stdout {
  43. logger = slog.New(slog.NewTextHandler(io.MultiWriter(lumberJackLogger, os.Stdout), opts))
  44. } else {
  45. logger = slog.New(slog.NewTextHandler(lumberJackLogger, opts))
  46. }
  47. } else {
  48. logger = slog.New(slog.NewTextHandler(os.Stdout, opts))
  49. }
  50. slog.SetDefault(logger)
  51. //todo 输出到robot
  52. slog.Info("setup logger ok", "level", level.String())
  53. }
  54. func ShutdownLogger() {
  55. lumberJackLogger.Rotate()
  56. }
  57. func WithGroup(name string) *slog.Logger {
  58. return logger.WithGroup(name)
  59. }
  60. func With(args ...any) *slog.Logger {
  61. return logger.With(args)
  62. }