logger.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package logger
  2. import (
  3. "log"
  4. "go.uber.org/zap"
  5. )
  6. var Log *zap.Logger
  7. var Sugar *zap.SugaredLogger
  8. var Std *log.Logger
  9. func Init(env string) error {
  10. opt := zap.AddStacktrace(zap.ErrorLevel) // error 日志打印堆栈信息
  11. var err error
  12. if env == "pro" {
  13. // Log, err = zap.NewProduction(opt)
  14. Log, err = newProduction(opt)
  15. log.Println("zap init newProduction")
  16. } else {
  17. // Log, err = zap.NewDevelopment(opt)
  18. Log, err = newDevelopment(opt)
  19. log.Println("zap init newDevelopment")
  20. }
  21. if err == nil {
  22. Sugar = Log.Sugar()
  23. }
  24. zap.ReplaceGlobals(Log) // 全局logger,zap.L() 和 zap.S() 需要调用 ReplaceGlobals 函数才会记录日志信息
  25. // 之后可以使用zap.L()代替Log,zap.S()代替Sugar
  26. Std = zap.NewStdLog(Log) // 标准输入自动转换为 zap.logger日志
  27. return err
  28. }
  29. func newProduction(options ...zap.Option) (*zap.Logger, error) {
  30. config := zap.Config{
  31. Level: zap.NewAtomicLevelAt(zap.WarnLevel),
  32. Development: false,
  33. Sampling: &zap.SamplingConfig{
  34. Initial: 100,
  35. Thereafter: 100,
  36. },
  37. Encoding: "json",
  38. EncoderConfig: zap.NewProductionEncoderConfig(),
  39. OutputPaths: []string{"stderr"},
  40. ErrorOutputPaths: []string{"stderr"},
  41. }
  42. return config.Build(options...)
  43. }
  44. func newDevelopment(options ...zap.Option) (*zap.Logger, error) {
  45. config := zap.Config{
  46. Level: zap.NewAtomicLevelAt(zap.DebugLevel),
  47. Development: true,
  48. Encoding: "console",
  49. EncoderConfig: zap.NewDevelopmentEncoderConfig(),
  50. OutputPaths: []string{"stderr"},
  51. ErrorOutputPaths: []string{"stderr"},
  52. }
  53. return config.Build(options...)
  54. }