logger.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. lumberJackLogger = &lumberjack.Logger{
  40. Filename: filename, //日志文件的位置
  41. MaxSize: common.LoggerConfig.MaxSize, //在进行切割之前,日志文件的最大大小(以MB为单位)
  42. MaxBackups: common.LoggerConfig.MaxBackups, //最多保留文件个数
  43. MaxAge: common.LoggerConfig.MaxAge, //保留旧文件的最大天数
  44. Compress: common.LoggerConfig.Compress, //是否压缩/归档旧文件
  45. LocalTime: true,
  46. }
  47. if persisted {
  48. if common.LoggerConfig.Stdout {
  49. logger = slog.New(slog.NewTextHandler(io.MultiWriter(lumberJackLogger, os.Stdout), opts))
  50. } else {
  51. logger = slog.New(slog.NewTextHandler(lumberJackLogger, opts))
  52. }
  53. } else {
  54. logger = slog.New(slog.NewTextHandler(os.Stdout, opts))
  55. }
  56. slog.SetDefault(logger)
  57. //todo 输出到robot
  58. slog.Info("setup logger ok",
  59. "level", level.String(),
  60. "filename", filename,
  61. "max size", common.LoggerConfig.MaxSize,
  62. "max backups", common.LoggerConfig.MaxBackups,
  63. "max age", common.LoggerConfig.MaxAge,
  64. "compress", common.LoggerConfig.Compress,
  65. )
  66. }
  67. func ShutdownLogger() {
  68. lumberJackLogger.Rotate()
  69. }
  70. func WithGroup(name string) *slog.Logger {
  71. return logger.WithGroup(name)
  72. }
  73. func With(args ...any) *slog.Logger {
  74. return logger.With(args)
  75. }