From 1e96ec3b25b63d9ffe856e5f13a8f61ac8d0d593 Mon Sep 17 00:00:00 2001 From: xiabin Date: Thu, 23 Jan 2025 18:39:48 +0800 Subject: [PATCH] =?UTF-8?q?ecpm=E6=95=B0=E6=8D=AE=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game_open_api/etc/game_open_api-api.yaml | 3 +- game_open_api/internal/config/config.go | 2 ++ .../internal/logic/douyin/get_ecpm_logic.go | 31 ++++++++++++------- game_open_api/internal/svc/service_context.go | 30 ++++++++++++++++++ game_open_api/model/game_score_model.go | 3 +- go.mod | 11 ++++--- go.sum | 18 +++++++---- 7 files changed, 74 insertions(+), 24 deletions(-) diff --git a/game_open_api/etc/game_open_api-api.yaml b/game_open_api/etc/game_open_api-api.yaml index 2367191..22b08e5 100644 --- a/game_open_api/etc/game_open_api-api.yaml +++ b/game_open_api/etc/game_open_api-api.yaml @@ -19,4 +19,5 @@ Log: DWCache: Host: 127.0.0.1:6379 - IdleTimeout: 60 \ No newline at end of file + IdleTimeout: 60 +EcpmLogPath: ./logs/ecpm.log \ No newline at end of file diff --git a/game_open_api/internal/config/config.go b/game_open_api/internal/config/config.go index feae364..cd9d5ea 100644 --- a/game_open_api/internal/config/config.go +++ b/game_open_api/internal/config/config.go @@ -22,4 +22,6 @@ type Config struct { Host string // 缓存服务器地址 IdleTimeout int } // 抖音微信缓存配置 + + EcpmLogPath string // 日志文件路径 } diff --git a/game_open_api/internal/logic/douyin/get_ecpm_logic.go b/game_open_api/internal/logic/douyin/get_ecpm_logic.go index 471dfce..5ef4f54 100644 --- a/game_open_api/internal/logic/douyin/get_ecpm_logic.go +++ b/game_open_api/internal/logic/douyin/get_ecpm_logic.go @@ -2,6 +2,7 @@ package douyin import ( "context" + "go.uber.org/zap" "time" "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/svc" @@ -10,15 +11,17 @@ import ( type GetEcpmLogic struct { logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext + ctx context.Context + svcCtx *svc.ServiceContext + zapLogger *zap.Logger } func NewGetEcpmLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetEcpmLogic { return &GetEcpmLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, + Logger: logx.WithContext(ctx), + zapLogger: svcCtx.ZapLogger, + ctx: ctx, + svcCtx: svcCtx, } } @@ -36,13 +39,7 @@ func (l *GetEcpmLogic) GetEcpm() (result bool, errNeverNil error) { return } - l.Logger.Infof("ecpm data result: %+v", res) - - ecpm, err := l.svcCtx.DouyinCli.GetEcpm(res) - if err != nil { - l.Logger.Error(err.Error()) - return - } + ecpm := l.svcCtx.DouyinCli.GetEcpm(res) if ecpm > float64(l.svcCtx.DouyinCli.GetEcpmValue(at.AppIdStr)) && len(res) > int(l.svcCtx.DouyinCli.GetEcpmViewCount(at.AppIdStr)) { result = true @@ -50,5 +47,15 @@ func (l *GetEcpmLogic) GetEcpm() (result bool, errNeverNil error) { result = false } + l.zapLogger.Info( + "ecpm data result", + zap.String("appId", at.AppIdStr), + zap.String("openId", at.OpenId), + zap.Float64("ecpm", ecpm), + zap.Int("viewCount", len(res)), + zap.Bool("result", result), + zap.Any("res", res), + ) + return } diff --git a/game_open_api/internal/svc/service_context.go b/game_open_api/internal/svc/service_context.go index 853959d..abf6b3c 100644 --- a/game_open_api/internal/svc/service_context.go +++ b/game_open_api/internal/svc/service_context.go @@ -9,6 +9,9 @@ import ( helper "gitea.youtukeji.com.cn/youtu/openapi-helper" redisCache "github.com/silenceper/wechat/v2/cache" "github.com/zeromicro/go-zero/core/stores/sqlx" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "gopkg.in/natefinch/lumberjack.v2" ) type ServiceContext struct { @@ -18,6 +21,7 @@ type ServiceContext struct { AppAccount model.AppAccountModel DouyinCli *helper.DouYinOpenApiClient WechatCli *helper.WechatApi + ZapLogger *zap.Logger } func NewServiceContext(c config.Config) *ServiceContext { @@ -45,6 +49,32 @@ func NewServiceContext(c config.Config) *ServiceContext { } } + //初始化一个zap日志对象用于写入ecpm日志 + svc.ZapLogger = zap.New(zapcore.NewCore( + zapcore.NewJSONEncoder(zapcore.EncoderConfig{ + TimeKey: "ts", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + FunctionKey: zapcore.OmitKey, + MessageKey: "msg", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeTime: zapcore.EpochTimeEncoder, + EncodeDuration: zapcore.SecondsDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + }), + zapcore.NewMultiWriteSyncer(zapcore.AddSync(&lumberjack.Logger{ + Filename: c.EcpmLogPath, // Log file path 日志文件的路径 + MaxSize: 1024, // Maximum size unit for each log file: M 每个日志最大大小 + MaxBackups: 30, // The maximum number of backups that can be saved for log files 可以保存的日志文件数量 + MaxAge: 7, // Maximum number of days the file can be saved 日志文件保存的最大天数 + Compress: true, // Compression or not 是否对日志文件进行压缩 + })), + zapcore.InfoLevel, + )) + return svc } diff --git a/game_open_api/model/game_score_model.go b/game_open_api/model/game_score_model.go index aa2a648..c44450a 100644 --- a/game_open_api/model/game_score_model.go +++ b/game_open_api/model/game_score_model.go @@ -5,11 +5,12 @@ import ( "database/sql" "errors" "fmt" + "sync" + "gitea.youtukeji.com.cn/xiabin/youtu_server/game_open_api/internal/types" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlc" "github.com/zeromicro/go-zero/core/stores/sqlx" - "sync" ) var _ GameScoreModel = (*customGameScoreModel)(nil) diff --git a/go.mod b/go.mod index 9a032f5..955bfae 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,14 @@ module gitea.youtukeji.com.cn/xiabin/youtu_server -go 1.23.4 +go 1.23.5 require ( - gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.2 + gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.3-2 github.com/golang-jwt/jwt/v4 v4.5.1 github.com/silenceper/wechat/v2 v2.1.7 github.com/zeromicro/go-zero v1.7.6 + go.uber.org/zap v1.27.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) require ( @@ -56,12 +58,13 @@ require ( go.opentelemetry.io/otel/trace v1.34.0 // indirect go.opentelemetry.io/proto/otlp v1.5.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect + go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.32.0 // indirect golang.org/x/net v0.34.0 // indirect golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 // indirect google.golang.org/grpc v1.69.4 // indirect google.golang.org/protobuf v1.36.3 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 690355c..5105047 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.2 h1:Rf6cjwTVJzPf5nB4Q6JCffMnBlxw6VykXVdMNSwznoY= -gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.2/go.mod h1:o3XiYjUmxptrwcYPbTwNc2SQSOeOj7qbQPdNNVU0H5w= +gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.3-2 h1:MtJ1uQRb7QqKIsbqEVjWk+T/TGx5CoKEx93RsiMcVsY= +gitea.youtukeji.com.cn/youtu/openapi-helper v0.0.3-2/go.mod h1:o3XiYjUmxptrwcYPbTwNc2SQSOeOj7qbQPdNNVU0H5w= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= @@ -194,6 +194,10 @@ go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -245,10 +249,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA= -google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4 h1://y4MHaM7tNLqTeWKyfBIeoAMxwKwRm/nODb5IKA3BE= +google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:AfA77qWLcidQWywD0YgqfpJzf50w2VjzBml3TybHeJU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 h1:yrTuav+chrF0zF/joFGICKTzYv7mh/gr9AgEXrVU8ao= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -267,6 +271,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=