zaplog.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package log
  2. import (
  3. "fmt"
  4. "github.com/zeromicro/go-zero/core/logx"
  5. "go.uber.org/zap"
  6. )
  7. const callerSkipOffset = 3
  8. type ZapWriter struct {
  9. logger *zap.Logger
  10. }
  11. func NewZapWriter(opts ...zap.Option) logx.Writer {
  12. opts = append(opts, zap.AddCallerSkip(callerSkipOffset))
  13. logger, _ := zap.NewProduction(opts...)
  14. defer logger.Sync()
  15. return &ZapWriter{
  16. logger: logger,
  17. }
  18. }
  19. func (w *ZapWriter) Alert(v interface{}) {
  20. w.logger.Error(fmt.Sprint(v))
  21. }
  22. func (w *ZapWriter) Close() error {
  23. return w.logger.Sync()
  24. }
  25. func (w *ZapWriter) Debug(v interface{}, fields ...logx.LogField) {
  26. w.logger.Debug(fmt.Sprint(v), toZapFields(fields...)...)
  27. }
  28. func (w *ZapWriter) Error(v interface{}, fields ...logx.LogField) {
  29. w.logger.Error(fmt.Sprint(v), toZapFields(fields...)...)
  30. }
  31. func (w *ZapWriter) Info(v interface{}, fields ...logx.LogField) {
  32. w.logger.Info(fmt.Sprint(v), toZapFields(fields...)...)
  33. }
  34. func (w *ZapWriter) Severe(v interface{}) {
  35. w.logger.Fatal(fmt.Sprint(v))
  36. }
  37. func (w *ZapWriter) Slow(v interface{}, fields ...logx.LogField) {
  38. w.logger.Warn(fmt.Sprint(v), toZapFields(fields...)...)
  39. }
  40. func (w *ZapWriter) Stack(v interface{}) {
  41. w.logger.Error(fmt.Sprint(v), zap.Stack("stack"))
  42. }
  43. func (w *ZapWriter) Stat(v interface{}, fields ...logx.LogField) {
  44. w.logger.Info(fmt.Sprint(v), toZapFields(fields...)...)
  45. }
  46. func toZapFields(fields ...logx.LogField) []zap.Field {
  47. zapFields := make([]zap.Field, 0, len(fields))
  48. for _, f := range fields {
  49. zapFields = append(zapFields, zap.Any(f.Key, f.Value))
  50. }
  51. return zapFields
  52. }