package mon import ( "context" "encoding/json" "strings" "time" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/timex" ) const mongoAddrSep = "," // FormatAddr formats mongo hosts to a string. func FormatAddr(hosts []string) string { return strings.Join(hosts, mongoAddrSep) } func logDuration(ctx context.Context, name, method string, startTime time.Duration, err error) { duration := timex.Since(startTime) logger := logx.WithContext(ctx).WithDuration(duration) if err != nil { logger.Errorf("mongo(%s) - %s - fail(%s)", name, method, err.Error()) return } if logSlowMon.True() && duration > slowThreshold.Load() { logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok", name, method) } else if logMon.True() { logger.Infof("mongo(%s) - %s - ok", name, method) } } func logDurationWithDocs(ctx context.Context, name, method string, startTime time.Duration, err error, docs ...any) { duration := timex.Since(startTime) logger := logx.WithContext(ctx).WithDuration(duration) content, jerr := json.Marshal(docs) // jerr should not be non-nil, but we don't care much on this, // if non-nil, we just log without docs. if jerr != nil { if err != nil { logger.Errorf("mongo(%s) - %s - fail(%s)", name, method, err.Error()) } else if logSlowMon.True() && duration > slowThreshold.Load() { logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok", name, method) } else if logMon.True() { logger.Infof("mongo(%s) - %s - ok", name, method) } return } if err != nil { logger.Errorf("mongo(%s) - %s - fail(%s) - %s", name, method, err.Error(), string(content)) } else if logSlowMon.True() && duration > slowThreshold.Load() { logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok - %s", name, method, string(content)) } else if logMon.True() { logger.Infof("mongo(%s) - %s - ok - %s", name, method, string(content)) } }