一些err接受问题

This commit is contained in:
2025-08-21 16:09:10 +08:00
parent efb34e0c5b
commit d0cad61028
2 changed files with 36 additions and 11 deletions

View File

@@ -39,6 +39,7 @@ type SDKConfig struct {
FlushInterval int // 刷新间隔 FlushInterval int // 刷新间隔
DiskBakPath string // 磁盘备份路径 DiskBakPath string // 磁盘备份路径
RetryN int // 每N次重试 RetryN int // 每N次重试
ChanSize int // 信道大小, 默认1000
reportN int reportN int
} }
@@ -100,6 +101,12 @@ func (sdk *SDK) varinit() error {
} }
sdk.sdkConfig.RetryN = _retryN.Int() sdk.sdkConfig.RetryN = _retryN.Int()
_chanSize, err := g.Config().Get(ctx, "angergs.bisdk.chanSize")
if err != nil {
return err
}
sdk.sdkConfig.ChanSize = _chanSize.Int()
g.Log().Infof(ctx, "[GameLog]client init success, config: %v", sdk.sdkConfig) g.Log().Infof(ctx, "[GameLog]client init success, config: %v", sdk.sdkConfig)
return nil return nil
} }
@@ -124,6 +131,9 @@ func (sdk *SDK) checkConfig() error {
if config.RetryN == 0 { if config.RetryN == 0 {
config.RetryN = 10 config.RetryN = 10
} }
if config.ChanSize == 0 {
config.ChanSize = 1000
}
config.DiskBakPath = strings.TrimSuffix(config.DiskBakPath, "/") config.DiskBakPath = strings.TrimSuffix(config.DiskBakPath, "/")
return nil return nil
@@ -148,7 +158,9 @@ func INIT(config *SDKConfig) (*SDK, error) {
sdk.buffer = make([]GameLog, 0, 100) sdk.buffer = make([]GameLog, 0, 100)
// 加载失败日志 // 加载失败日志
failLogs, err := sdk.loadFailLogs4disk() failLogs, err := sdk.loadFailLogs4disk()
if err != nil && len(failLogs) > 0 { if err != nil {
g.Log().Errorf(ctx, "[GameLog]load fail logs error: %v", err)
} else if len(failLogs) > 0 {
sdk.buffer = append(sdk.buffer, failLogs...) sdk.buffer = append(sdk.buffer, failLogs...)
} }
@@ -212,7 +224,11 @@ func (sdk *SDK) loadFailLogs4disk() (logs []GameLog, err error) {
// 备份失败日志追加到磁盘 // 备份失败日志追加到磁盘
func (sdk *SDK) bakFailLogs2disk(failLogs []GameLog) { func (sdk *SDK) bakFailLogs2disk(failLogs []GameLog) {
bakPath := fmt.Sprintf("%s/failBuffer%s.bak.log", sdk.sdkConfig.DiskBakPath, gtime.Now().Format("YmdH")) bakPath := fmt.Sprintf("%s/failBuffer%s.bak.log", sdk.sdkConfig.DiskBakPath, gtime.Now().Format("YmdH"))
content, _ := json.Marshal(failLogs) content, err := json.Marshal(failLogs)
if err != nil {
g.Log().Errorf(ctx, "[GameLog]marshal fail logs error: %v", err)
return
}
gfile.PutContentsAppend(bakPath, string(content)+"\n") gfile.PutContentsAppend(bakPath, string(content)+"\n")
g.Log().Infof(ctx, "[GameLog]backup fail buffer to %s", bakPath) g.Log().Infof(ctx, "[GameLog]backup fail buffer to %s", bakPath)
} }
@@ -288,7 +304,11 @@ func (sdk *SDK) send(logs []GameLog) {
data := make([][]any, 0, len(logs)) data := make([][]any, 0, len(logs))
// logs 拆分成二维数组 // logs 拆分成二维数组
for _, log := range logs { for _, log := range logs {
propertyJson, _ := json.Marshal(log.Property) propertyJson, err := json.Marshal(log.Property)
if err != nil {
g.Log().Errorf(ctx, "[GameLog]skip log parse, marshal property error: %v", err)
continue
}
data = append(data, []any{ data = append(data, []any{
log.Uid, log.Uid,
log.Event, log.Event,
@@ -302,7 +322,11 @@ func (sdk *SDK) send(logs []GameLog) {
Pid: sdk.sdkConfig.Pid, Pid: sdk.sdkConfig.Pid,
Data: data, Data: data,
} }
jsonBody, _ := json.Marshal(sbody) jsonBody, err := json.Marshal(sbody)
if err != nil {
g.Log().Errorf(ctx, "[GameLog]marshal send body error: %v", err)
return
}
// giz压缩 // giz压缩
gzBody := bytes.NewBuffer([]byte{}) gzBody := bytes.NewBuffer([]byte{})
@@ -315,18 +339,18 @@ func (sdk *SDK) send(logs []GameLog) {
sdk.sdkConfig.reportN += 1 sdk.sdkConfig.reportN += 1
res, err := gamelogClient.Post(timeoutCtx, sdk.sdkConfig.BaseUrl+"/report/event", xorBody) res, err := gamelogClient.Post(timeoutCtx, sdk.sdkConfig.BaseUrl+"/report/event", xorBody)
defer func() {
cerr := res.Close()
if cerr != nil {
g.Log().Errorf(ctx, "[GameLog]close response error: %v", cerr)
}
}()
// 失败重新加入缓冲区 // 失败重新加入缓冲区
if err != nil { if err != nil {
sdk.bakFailLogs2disk(logs) sdk.bakFailLogs2disk(logs)
g.Log().Warningf(ctx, "[GameLog]send log error, bak to fail buffer(%d): %v", len(logs), err) g.Log().Warningf(ctx, "[GameLog]send log error, bak to fail buffer(%d): %v", len(logs), err)
return return
} }
defer func() {
cerr := res.Close()
if cerr != nil {
g.Log().Errorf(ctx, "[GameLog]close response error: %v", cerr)
}
}()
httpcode := res.StatusCode httpcode := res.StatusCode
resBody := res.ReadAllString() resBody := res.ReadAllString()
// 收集器拦截, 重新加入缓冲区 // 收集器拦截, 重新加入缓冲区

View File

@@ -21,7 +21,8 @@ func TestGamelog(t *testing.T) {
FlushInterval: 5, // 上报间隔 FlushInterval: 5, // 上报间隔
DiskBakPath: "gamelog", // 本地磁盘备份, 用于意外情况下临时保存日志, 请确保该目录持久化(容器内要挂载). 每次启动时或每N次上报时加载到失败队列 DiskBakPath: "gamelog", // 本地磁盘备份, 用于意外情况下临时保存日志, 请确保该目录持久化(容器内要挂载). 每次启动时或每N次上报时加载到失败队列
// 可填 // 可填
RetryN: 2, // 默认每10次上传检查一次磁盘的失败数据 RetryN: 2, // 默认每10次, 上传检查一次磁盘的失败数据
ChanSize: 500, // 默认1000, 信道size
}) })
// 随机测试事件和属性 // 随机测试事件和属性