Skip to content

Commit

Permalink
feat(gerror): error包实现
Browse files Browse the repository at this point in the history
  • Loading branch information
morehao committed Jun 26, 2024
1 parent c1bb966 commit 1356bfc
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 37 deletions.
24 changes: 12 additions & 12 deletions dbClient/orm_logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,20 @@ func (l *ormLogger) Trace(ctx context.Context, begin time.Time, fc func() (strin
ralCode = -1
}
sql, rows := fc()
if len(sql) > l.MaxSqlLen {
if len(sql) > l.MaxSqlLen && l.MaxSqlLen > 0 {
sql = sql[:l.MaxSqlLen]
}

fileLineNum := utils.FileWithLineNum()
fields := l.commonFields(ctx)
fields = append(fields,
"affectedRow", rows,
"requestStartTime", glog.FormatRequestTime(begin),
"requestEndTime", glog.FormatRequestTime(end),
"file", fileLineNum,
"cost", cost,
"ralCode", ralCode,
"sql", sql,
glog.KeyAffectedRows, rows,
glog.KeyRequestStartTime, glog.FormatRequestTime(begin),
glog.KeyRequestEndTime, glog.FormatRequestTime(end),
glog.KeyFile, fileLineNum,
glog.KeyCost, cost,
glog.KeyRalCode, ralCode,
glog.KeySql, sql,
)

if l.SlowThreshold > 0 && cost >= float64(l.SlowThreshold/time.Millisecond) {
Expand All @@ -105,10 +105,10 @@ func (l *ormLogger) Trace(ctx context.Context, begin time.Time, fc func() (strin

func (l *ormLogger) commonFields(ctx context.Context) []interface{} {
fields := []interface{}{
glog.KeyProto, "mysql",
"service", l.Service,
"addr", l.Addr,
"database", l.Database,
glog.KeyProto, glog.ValueProtoMysql,
glog.KeyService, l.Service,
glog.KeyAddr, l.Addr,
glog.KeyDatabase, l.Database,
}
return fields
}
30 changes: 15 additions & 15 deletions dbClient/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func (l redisLogger) ProcessHook(next redis.ProcessHook) redis.ProcessHook {
begin := time.Now()
fields := l.commonFields(ctx)
fields = append(fields,
"cmd", cmd.FullName(),
glog.KeyCmd, cmd.FullName(),
)
var ralCode int
if err := cmd.Err(); err != nil {
Expand All @@ -85,11 +85,11 @@ func (l redisLogger) ProcessHook(next redis.ProcessHook) redis.ProcessHook {
end := time.Now()
cost := glog.GetRequestCost(begin, end)
fields = append(fields,
"cmdContent", cmd.String(),
"ralCode", ralCode,
"requestStartTime", glog.FormatRequestTime(begin),
"requestEndTime", glog.FormatRequestTime(end),
"cost", cost,
glog.KeyCmdContent, cmd.String(),
glog.KeyRalCode, ralCode,
glog.KeyRequestStartTime, glog.FormatRequestTime(begin),
glog.KeyRequestEndTime, glog.FormatRequestTime(end),
glog.KeyCost, cost,
)
l.Logger.Errorw(ctx, msg, fields...)
return err
Expand All @@ -100,11 +100,11 @@ func (l redisLogger) ProcessHook(next redis.ProcessHook) redis.ProcessHook {
end := time.Now()
cost := glog.GetRequestCost(begin, end)
fields = append(fields,
"cmdContent", cmd.String(),
"ralCode", ralCode,
"requestStartTime", glog.FormatRequestTime(begin),
"requestEndTime", glog.FormatRequestTime(end),
"cost", cost,
glog.KeyCmdContent, cmd.String(),
glog.KeyRalCode, ralCode,
glog.KeyRequestStartTime, glog.FormatRequestTime(begin),
glog.KeyRequestEndTime, glog.FormatRequestTime(end),
glog.KeyCost, cost,
)

l.Logger.Infow(ctx, "redis execute success", fields...)
Expand All @@ -121,10 +121,10 @@ func (l redisLogger) ProcessPipelineHook(next redis.ProcessPipelineHook) redis.P

func (l *redisLogger) commonFields(ctx context.Context) []interface{} {
fields := []interface{}{
glog.KeyProto, "redis",
"service", l.Service,
"addr", l.Addr,
"database", l.Database,
glog.KeyProto, glog.ValueProtoRedis,
glog.KeyService, l.Service,
glog.KeyAddr, l.Addr,
glog.KeyDatabase, l.Database,
}
return fields
}
63 changes: 61 additions & 2 deletions gerror/error.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,69 @@
package gerror

import (
"fmt"
"github.com/pkg/errors"
)

type Error struct {
Code int
Msg string
}

func (err Error) Error() string {
return err.Msg
// Error 方法实现了error接口,返回错误信息
func (e Error) Error() string {
return e.Msg
}

// Wrap 用于包装错误信息
func (e Error) Wrap(err error) error {
if err == nil {
return nil
}

// 保存原始错误信息
msg := e.Msg
// 更新错误信息,方便后续使用
e.Msg = err.Error()
return errors.Wrap(err, msg)
}

func (e Error) Wrapf(err error, format string, args ...interface{}) error {
if err == nil {
return nil
}

// 保存原始错误信息
msg := e.Msg
formattedMsg := fmt.Sprintf(format, args...)
e.Msg = err.Error()
return errors.Wrap(err, fmt.Sprintf("%s %s", formattedMsg, msg))
}

func (e Error) GetCode() int {
return e.Code
}

func (e Error) GetMsg() string {
return e.Msg
}

// ResetMsg 重置错误信息
func (e Error) ResetMsg(msg string) {
e.Msg = msg
}

// AppendMsg 在既有错误信息的基础上追加新的错误信息
func (e Error) AppendMsg(args ...interface{}) {
e.Msg += fmt.Sprint(args...)
}

// Is 判断是否为指定错误类型
func (e Error) Is(targetErr error) bool {
return errors.Is(targetErr, e)
}

// As 判断是否为指定错误类型,并将错误信息赋值给目标变量
func (e Error) As(targetErr interface{}) bool {
return errors.As(e, targetErr)
}
31 changes: 31 additions & 0 deletions gerror/error_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package gerror

import (
"testing"
)

func TestWrap(t *testing.T) {
err1 := Error{
Code: 1,
Msg: "test1",
}
err2 := Error{
Code: 2,
Msg: "test2",
}
err := err1.Wrap(err2)
t.Log(err)
}

func TestWrapf(t *testing.T) {
err1 := Error{
Code: 1,
Msg: "test1",
}
err2 := Error{
Code: 2,
Msg: "test2",
}
err := err1.Wrapf(err2, "here is errMsg:%s", "123")
t.Log(err)
}
17 changes: 14 additions & 3 deletions glog/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ const (
KeySpanId = "spanId"

MsgFlagNotice = "notice"
MsgFlagMysql = "mysql"
MsgFlagRedis = "redis"

KeyService = "service"
KeyHost = "host"
KeyClientIp = "clientIp"
KeyHandle = "handle"
Expand All @@ -53,10 +52,22 @@ const (
KeyResponseBodySize = "responseBodySize"
KeyRequestStartTime = "requestStartTime"
KeyRequestEndTime = "requestEndTime"
KeyCostTime = "cost"
KeyCost = "cost"
KeyRequestErr = "requestErr"
KeyErrorCode = "errorCode"
KeyErrorMsg = "errorMsg"
KeyAffectedRows = "affectedRows"
KeyAddr = "addr"
KeyDatabase = "database"
KeySql = "sql"
KeyCmd = "cmd"
KeyCmdContent = "cmdContent"
KeyRalCode = "ralCode"
KeyFile = "file"

ValueProtoHttp = "http"
ValueProtoMysql = "mysql"
ValueProtoRedis = "redis"
)

type Level string
Expand Down
10 changes: 5 additions & 5 deletions glog/zap_logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,11 +257,11 @@ func getZapEncoder() zapcore.Encoder {

// 配置编码器配置
encoderCfg := zapcore.EncoderConfig{
LevelKey: "level", // 日志级别的键名,例如 "INFO", "ERROR"
TimeKey: "time", // 时间戳的键名,记录日志生成的时间
StacktraceKey: "stacktrace", // 堆栈跟踪的键名,记录日志产生时的堆栈信息
CallerKey: "file", // 调用者的键名,记录日志调用的位置 (文件名和行号)
FunctionKey: "function", // 函数名的键名,记录调用函数的名称
LevelKey: "level", // 日志级别的键名,例如 "INFO", "ERROR"
TimeKey: "time", // 时间戳的键名,记录日志生成的时间
StacktraceKey: "stacktrace", // 堆栈跟踪的键名,记录日志产生时的堆栈信息
CallerKey: "file", // 调用者的键名,记录日志调用的位置 (文件名和行号)
// FunctionKey: "function", // 函数名的键名,记录调用函数的名称
MessageKey: "msg", // 日志消息的键名,记录实际的日志内容
LineEnding: zapcore.DefaultLineEnding, // 日志行的结束符,默认使用换行符
EncodeCaller: zapcore.ShortCallerEncoder, // 调用者编码器,使用短格式 (文件名:行号)
Expand Down

0 comments on commit 1356bfc

Please sign in to comment.