:::info 支持。 :::

使用 WithFileRotationP 即可

  1. accessLogger, err := logger.NewJSONLogger(
  2. logger.WithDisableConsole(),
  3. logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
  4. logger.WithTimeLayout(time_parse.CSTLayout),
  5. logger.WithFileP(configs.ProjectAccessLogFile),
  6. )
  7. // 这是初始化 Logger 的地方,当前使用的是 WithFileP 方法,还有一个 WithFileRotationP 方法。
  8. // WithFileRotationP 是支持日志分割的。
  9. ---
  10. accessLogger, err := logger.NewJSONLogger(
  11. logger.WithDisableConsole(),
  12. logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
  13. logger.WithTimeLayout(time_parse.CSTLayout),
  14. logger.WithFileRotationP(configs.ProjectAccessLogFile),
  15. )
  16. // 当使用 WithFileRotationP 时,这时日志就支持自动切割。

WithFileP 和 WithFileRotationP 代码片段

  1. // see: pkg/logger/logger.go
  2. // WithFileP write log to some file
  3. func WithFileP(file string) Option {
  4. dir := filepath.Dir(file)
  5. if err := os.MkdirAll(dir, 0766); err != nil {
  6. panic(err)
  7. }
  8. f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0766)
  9. if err != nil {
  10. panic(err)
  11. }
  12. return func(opt *option) {
  13. opt.file = zapcore.Lock(f)
  14. }
  15. }
  16. // WithFileRotationP write log to some file with rotation
  17. func WithFileRotationP(file string) Option {
  18. dir := filepath.Dir(file)
  19. if err := os.MkdirAll(dir, 0766); err != nil {
  20. panic(err)
  21. }
  22. return func(opt *option) {
  23. opt.file = &lumberjack.Logger{ // concurrent-safed
  24. Filename: file, // 文件路径
  25. MaxSize: 128, // 单个文件最大尺寸,默认单位 M
  26. MaxBackups: 300, // 最多保留 300 个备份
  27. MaxAge: 30, // 最大时间,默认单位 day
  28. LocalTime: true, // 使用本地时间
  29. Compress: true, // 是否压缩 disabled by default
  30. }
  31. }
  32. }