在Golang中,我们可以使用第三方日志库(如logrus、zap等)来实现日志的错误分类与统计。下面以logrus为例,介绍如何进行错误分类与统计。
go get github.com/sirupsen/logrus
package main
import (
	"github.com/sirupsen/logrus"
	"sync"
)
type CustomLogger struct {
	logrus.Logger
	errorCount map[string]int
	mu         sync.Mutex
}
func NewCustomLogger() *CustomLogger {
	return &CustomLogger{
		Logger:     logrus.New(),
		errorCount: make(map[string]int),
	}
}
func (cl *CustomLogger) ErrorWithCategory(category, message string) {
	cl.Logger.WithFields(logrus.Fields{
		"category": category,
	}).Error(message)
	cl.mu.Lock()
	cl.errorCount[category]++
	cl.mu.Unlock()
}
func (cl *CustomLogger) GetErrorCount() map[string]int {
	cl.mu.Lock()
	defer cl.mu.Unlock()
	return cl.errorCount
}
func main() {
	logger := NewCustomLogger()
	logger.ErrorWithCategory("database", "connection failed")
	logger.ErrorWithCategory("api", "invalid request")
	logger.ErrorWithCategory("database", "query error")
	// 输出错误分类统计信息
	errorCount := logger.GetErrorCount()
	for category, count := range errorCount {
		logrus.Infof("Error count for category '%s': %d", category, count)
	}
}
上述代码中,我们创建了一个自定义日志结构体CustomLogger,并为其添加了ErrorWithCategory方法,用于记录带有分类的错误日志。同时,我们还添加了GetErrorCount方法,用于获取错误分类统计信息。
在main函数中,我们使用ErrorWithCategory方法记录了不同类别的错误日志,并通过GetErrorCount方法输出了错误分类统计信息。