From 0cbf7efddcd32755b89b7a35457ed1008be0e93d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Sat, 3 Sep 2022 22:37:32 +0800 Subject: [PATCH] - update zap --- api.go | 4 + api_gorm.go | 29 ++++--- api_mongo.go | 21 +++-- const.go | 2 +- gin.go | 4 + gin_gorm.go | 41 +++++---- gin_mongo.go | 62 +++++++------- go.mod | 6 +- go.sum | 14 +-- logrus.console.go | 35 -------- logrus.go | 208 --------------------------------------------- zap.console.go | 46 ---------- zap.go | 191 +++++++++++++++-------------------------- zerolog.console.go | 46 ---------- zerolog.go | 88 ------------------- 15 files changed, 168 insertions(+), 629 deletions(-) delete mode 100644 logrus.console.go delete mode 100644 logrus.go delete mode 100644 zap.console.go delete mode 100644 zerolog.console.go delete mode 100644 zerolog.go diff --git a/api.go b/api.go index d1f7e1b..002ae6c 100644 --- a/api.go +++ b/api.go @@ -14,6 +14,7 @@ import ( type ApiClient struct { gormClient *dorm.GormClient // 数据库驱动 mongoClient *dorm.MongoClient // 数据库驱动 + zapLog ZapLog // 日志服务 gormConfig struct { tableName string // 表名 insideIp string // 内网ip @@ -49,6 +50,7 @@ type ApiClientConfig struct { GormClientFun apiGormClientFun // 日志配置 MongoClientFun apiMongoClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewApiClient 创建接口实例化 @@ -60,6 +62,8 @@ func NewApiClient(config *ApiClientConfig) (*ApiClient, error) { c := &ApiClient{} + c.zapLog = config.ZapLog + gormClient, gormTableName := config.GormClientFun() mongoClient, mongoDatabaseName, mongoCollectionName := config.MongoClientFun() diff --git a/api_gorm.go b/api_gorm.go index 819bf36..b270850 100644 --- a/api_gorm.go +++ b/api_gorm.go @@ -10,7 +10,6 @@ import ( "go.dtapp.net/gourl" "gorm.io/datatypes" "gorm.io/gorm" - "log" "os" "runtime" "time" @@ -21,6 +20,7 @@ import ( type ApiGormClientConfig struct { GormClientFun apiGormClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewApiGormClient 创建接口实例化 @@ -32,6 +32,8 @@ func NewApiGormClient(config *ApiGormClientConfig) (*ApiClient, error) { c := &ApiClient{} + c.zapLog = config.ZapLog + client, tableName := config.GormClientFun() if client == nil || client.Db == nil { @@ -47,7 +49,7 @@ func NewApiGormClient(config *ApiGormClientConfig) (*ApiClient, error) { c.gormConfig.debug = config.Debug - err := c.gormClient.Db.Table(c.gormConfig.tableName).AutoMigrate(&apiPostgresqlLog{}) + err := c.gormAutoMigrate() if err != nil { return nil, errors.New("创建表失败:" + err.Error()) } @@ -63,6 +65,11 @@ func NewApiGormClient(config *ApiGormClientConfig) (*ApiClient, error) { return c, nil } +// 创建模型 +func (c *ApiClient) gormAutoMigrate() error { + return c.gormClient.Db.Table(c.gormConfig.tableName).AutoMigrate(&apiPostgresqlLog{}) +} + // 模型结构体 type apiPostgresqlLog struct { LogId uint `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 @@ -125,17 +132,17 @@ func (c *ApiClient) GormMiddleware(ctx context.Context, request gorequest.Respon SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.HeaderIsImg() { - log.Printf("[log.GormMiddleware]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddleware]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.JsonDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = request.ResponseBody //【返回】内容 } else { - log.Printf("[log.GormMiddleware]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddleware]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.gormRecord(ctx, data) if err != nil { - log.Printf("[log.GormMiddleware]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.GormMiddleware]:%s\n", err.Error()) } } @@ -156,17 +163,17 @@ func (c *ApiClient) GormMiddlewareXml(ctx context.Context, request gorequest.Res SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.HeaderIsImg() { - log.Printf("[log.GormMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.XmlDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = datatypes.JSON(dorm.JsonEncodeNoError(dorm.XmlDecodeNoError(request.ResponseBody))) //【返回】内容 } else { - log.Printf("[log.GormMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.gormRecord(ctx, data) if err != nil { - log.Printf("[log.GormMiddlewareXml]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.GormMiddlewareXml]:%s\n", err.Error()) } } @@ -187,16 +194,16 @@ func (c *ApiClient) GormMiddlewareCustom(ctx context.Context, api string, reques SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.HeaderIsImg() { - log.Printf("[log.GormMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.JsonDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = request.ResponseBody //【返回】内容 } else { - log.Printf("[log.GormMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.GormMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.gormRecord(ctx, data) if err != nil { - log.Printf("[log.GormMiddlewareCustom]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.GormMiddlewareCustom]:%s\n", err.Error()) } } diff --git a/api_mongo.go b/api_mongo.go index ee76bdd..45bf1d7 100644 --- a/api_mongo.go +++ b/api_mongo.go @@ -21,6 +21,7 @@ import ( type ApiMongoClientConfig struct { MongoClientFun apiMongoClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewApiMongoClient 创建接口实例化 @@ -33,6 +34,8 @@ func NewApiMongoClient(config *ApiMongoClientConfig) (*ApiClient, error) { c := &ApiClient{} + c.zapLog = config.ZapLog + client, databaseName, collectionName := config.MongoClientFun() if client == nil || client.Db == nil { @@ -179,17 +182,17 @@ func (c *ApiClient) MongoMiddleware(ctx context.Context, request gorequest.Respo SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { - log.Printf("[log.MongoMiddleware]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddleware]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.JsonDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = dorm.JsonDecodeNoError(request.ResponseBody) //【返回】内容 } else { - log.Printf("[log.MongoMiddleware]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddleware]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.mongoRecord(ctx, data) if err != nil { - log.Printf("[log.MongoMiddleware]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.MongoMiddleware]:%s\n", err.Error()) } } @@ -210,17 +213,17 @@ func (c *ApiClient) MongoMiddlewareXml(ctx context.Context, request gorequest.Re SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { - log.Printf("[log.MongoMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.XmlDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = dorm.XmlDecodeNoError(request.ResponseBody) //【返回】内容 } else { - log.Printf("[log.MongoMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddlewareXml]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.mongoRecord(ctx, data) if err != nil { - log.Printf("[log.MongoMiddlewareXml]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.MongoMiddlewareXml]:%s\n", err.Error()) } } @@ -241,16 +244,16 @@ func (c *ApiClient) MongoMiddlewareCustom(ctx context.Context, api string, reque SdkVersion: sdkVersion, //【程序】Sdk版本 } if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { - log.Printf("[log.MongoMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseHeader.Get("Content-Type")) } else { if len(dorm.JsonDecodeNoError(request.ResponseBody)) > 0 { data.ResponseBody = dorm.JsonDecodeNoError(request.ResponseBody) //【返回】内容 } else { - log.Printf("[log.MongoMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseBody) + c.zapLog.WithTraceId(ctx).Sugar().Infof("[log.MongoMiddlewareCustom]:%s %s\n", data.RequestUri, request.ResponseBody) } } err := c.mongoRecord(ctx, data) if err != nil { - log.Printf("[log.MongoMiddlewareCustom]:%s\n", err.Error()) + c.zapLog.WithTraceId(ctx).Sugar().Errorf("[log.MongoMiddlewareCustom]:%s\n", err.Error()) } } diff --git a/const.go b/const.go index 3d7cd49..17fa949 100644 --- a/const.go +++ b/const.go @@ -1,5 +1,5 @@ package golog const ( - Version = "1.0.51" + Version = "1.0.52" ) diff --git a/gin.go b/gin.go index eb45f59..c7dc7c6 100644 --- a/gin.go +++ b/gin.go @@ -23,6 +23,7 @@ type GinClient struct { gormClient *dorm.GormClient // 数据库驱动 mongoClient *dorm.MongoClient // 数据库驱动 ipService *goip.Client // ip服务 + zapLog ZapLog // 日志服务 gormConfig struct { tableName string // 表名 insideIp string // 内网ip @@ -59,6 +60,7 @@ type GinClientConfig struct { GormClientFun ginGormClientFun // 日志配置 MongoClientFun apiMongoClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewGinClient 创建框架实例化 @@ -71,6 +73,8 @@ func NewGinClient(config *GinClientConfig) (*GinClient, error) { c := &GinClient{} + c.zapLog = config.ZapLog + gormClient, gormTableName := config.GormClientFun() mongoClient, mongoDatabaseName, mongoCollectionName := config.MongoClientFun() diff --git a/gin_gorm.go b/gin_gorm.go index 7a2bb26..b5c5b21 100644 --- a/gin_gorm.go +++ b/gin_gorm.go @@ -16,7 +16,6 @@ import ( "gorm.io/datatypes" "gorm.io/gorm" "io/ioutil" - "log" "net" "os" "runtime" @@ -28,6 +27,7 @@ type GinGormClientConfig struct { IpService *goip.Client // ip服务 GormClientFun ginGormClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewGinGormClient 创建框架实例化 @@ -40,6 +40,8 @@ func NewGinGormClient(config *GinGormClientConfig) (*GinClient, error) { c := &GinClient{} + c.zapLog = config.ZapLog + client, tableName := config.GormClientFun() if client == nil || client.Db == nil { @@ -57,7 +59,7 @@ func NewGinGormClient(config *GinGormClientConfig) (*GinClient, error) { c.ipService = config.IpService - err := c.gormClient.Db.Table(c.gormConfig.tableName).AutoMigrate(&ginPostgresqlLog{}) + err := c.gormAutoMigrate() if err != nil { return nil, errors.New("创建表失败:" + err.Error()) } @@ -73,6 +75,11 @@ func NewGinGormClient(config *GinGormClientConfig) (*GinClient, error) { return c, nil } +// 创建模型 +func (c *GinClient) gormAutoMigrate() error { + return c.gormClient.Db.Table(c.gormConfig.tableName).AutoMigrate(&ginPostgresqlLog{}) +} + // 模型结构体 type ginPostgresqlLog struct { LogId uint `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 @@ -151,12 +158,12 @@ func (c *GinClient) gormRecordJson(ginCtx *gin.Context, traceId string, requestT if len(dorm.JsonEncodeNoError(requestBody)) > 0 { data.RequestBody = datatypes.JSON(dorm.JsonEncodeNoError(requestBody)) //【请求】请求主体 } else { - log.Printf("[log.gormRecordJson]:%s %s\n", data.RequestUri, requestBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[log.gormRecordJson]:%s %s\n", data.RequestUri, requestBody) } err := c.gormRecord(data) if err != nil { - log.Printf("[golog.gormRecordJson]:%s\n", err) + c.zapLog.WithTraceIdStr(traceId).Sugar().Errorf("[golog.gormRecordJson]:%s\n", err) } } @@ -192,12 +199,12 @@ func (c *GinClient) gormRecordXml(ginCtx *gin.Context, traceId string, requestTi if len(dorm.JsonEncodeNoError(requestBody)) > 0 { data.RequestBody = datatypes.JSON(dorm.JsonEncodeNoError(requestBody)) //【请求】请求主体 } else { - log.Printf("[log.gormRecordXml]:%s %s\n", data.RequestUri, requestBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[log.gormRecordXml]:%s %s\n", data.RequestUri, requestBody) } err := c.gormRecord(data) if err != nil { - log.Printf("[golog.gormRecordXml]:%s\n", err) + c.zapLog.WithTraceIdStr(traceId).Sugar().Errorf("[golog.gormRecordXml]:%s\n", err) } } @@ -218,7 +225,7 @@ func (c *GinClient) GormMiddleware() gin.HandlerFunc { data, _ := ioutil.ReadAll(ginCtx.Request.Body) if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware] %s\n", data) + c.zapLog.WithLogger().Sugar().Infof("[golog.GormMiddleware] %s\n", data) } // 复用 @@ -254,12 +261,12 @@ func (c *GinClient) GormMiddleware() gin.HandlerFunc { } if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware.len(jsonBody)] %v\n", len(jsonBody)) + c.zapLog.WithLogger().Sugar().Infof("[golog.GormMiddleware.len(jsonBody)] %v\n", len(jsonBody)) } if err != nil { if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware.json.Unmarshal] %s %s\n", jsonBody, err) + c.zapLog.WithLogger().Sugar().Infof("[golog.GormMiddleware.json.Unmarshal] %s %s\n", jsonBody, err) } dataJson = false xmlBody = goxml.XmlDecode(string(data)) @@ -267,8 +274,8 @@ func (c *GinClient) GormMiddleware() gin.HandlerFunc { } if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware.xmlBody] %s\n", xmlBody) - log.Printf("[golog.GormMiddleware.jsonBody] %s\n", jsonBody) + c.zapLog.WithLogger().Sugar().Infof("[golog.GormMiddleware.xmlBody] %s\n", xmlBody) + c.zapLog.WithLogger().Sugar().Infof("[golog.GormMiddleware.jsonBody] %s\n", jsonBody) } clientIp := gorequest.ClientIp(ginCtx.Request) @@ -299,16 +306,16 @@ func (c *GinClient) GormMiddleware() gin.HandlerFunc { if dataJson { if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", jsonBody) - log.Printf("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", dorm.JsonEncodeNoError(jsonBody)) - log.Printf("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", datatypes.JSON(dorm.JsonEncodeNoError(jsonBody))) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", jsonBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", dorm.JsonEncodeNoError(jsonBody)) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.json.request_body] %s\n", datatypes.JSON(dorm.JsonEncodeNoError(jsonBody))) } c.gormRecordJson(ginCtx, traceId, requestTime, jsonBody, responseCode, responseBody, startTime, endTime, clientIp, requestClientIpCountry, requestClientIpRegion, requestClientIpProvince, requestClientIpCity, requestClientIpIsp) } else { if c.gormConfig.debug { - log.Printf("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", xmlBody) - log.Printf("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", dorm.JsonEncodeNoError(xmlBody)) - log.Printf("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", datatypes.JSON(dorm.JsonEncodeNoError(xmlBody))) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", xmlBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", dorm.JsonEncodeNoError(xmlBody)) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.GormMiddleware.gormRecord.xml.request_body] %s\n", datatypes.JSON(dorm.JsonEncodeNoError(xmlBody))) } c.gormRecordXml(ginCtx, traceId, requestTime, xmlBody, responseCode, responseBody, startTime, endTime, clientIp, requestClientIpCountry, requestClientIpRegion, requestClientIpProvince, requestClientIpCity, requestClientIpIsp) } diff --git a/gin_mongo.go b/gin_mongo.go index 91bfa84..05c4941 100644 --- a/gin_mongo.go +++ b/gin_mongo.go @@ -18,7 +18,6 @@ import ( "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "io/ioutil" - "log" "net" "os" "runtime" @@ -30,6 +29,7 @@ type GinMongoClientConfig struct { IpService *goip.Client // ip服务 MongoClientFun ginMongoClientFun // 日志配置 Debug bool // 日志开关 + ZapLog ZapLog // 日志服务 } // NewGinMongoClient 创建框架实例化 @@ -43,6 +43,8 @@ func NewGinMongoClient(config *GinMongoClientConfig) (*GinClient, error) { c := &GinClient{} + c.zapLog = config.ZapLog + client, databaseName, collectionName := config.MongoClientFun() if client == nil || client.Db == nil { @@ -89,78 +91,78 @@ func (c *GinClient) mongoCreateCollection() { "listCollections", 1, }}).Decode(&commandResult) if commandErr != nil { - log.Println("检查时间序列集合:", commandErr) + c.zapLog.WithLogger().Sugar().Error("检查时间序列集合:", commandErr) } else { err := c.mongoClient.Db.Database(c.mongoConfig.databaseName).CreateCollection(context.TODO(), c.mongoConfig.collectionName, options.CreateCollection().SetTimeSeriesOptions(options.TimeSeries().SetTimeField("request_time"))) if err != nil { - log.Println("创建时间序列集合:", err) + c.zapLog.WithLogger().Sugar().Error("创建时间序列集合:", err) } } } // 创建索引 func (c *GinClient) mongoCreateIndexes() { - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"trace_id", 1}, }})) - log.Printf(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_time", -1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_method", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_proto", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip_country", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip_region", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip_province", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip_city", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"request_ip_isp", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"response_time", -1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"response_code", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"system_host_name", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"system_inside_ip", 1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"go_version", -1}, }})) - log.Println(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ + c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ Keys: bson.D{ {"sdk_version", -1}, }})) @@ -248,12 +250,12 @@ func (c *GinClient) mongoRecordJson(ginCtx *gin.Context, traceId string, request if len(dorm.JsonEncodeNoError(requestBody)) > 0 { data.RequestBody = requestBody //【请求】请求主体 } else { - log.Printf("[log.mongoRecordJson]:%s %s\n", data.RequestUri, requestBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[log.mongoRecordJson]:%s %s\n", data.RequestUri, requestBody) } err := c.mongoRecord(data) if err != nil { - log.Printf("[golog.mongoRecordJson]:%s\n", err) + c.zapLog.WithTraceIdStr(traceId).Sugar().Errorf("[golog.mongoRecordJson]:%s\n", err) } } @@ -289,12 +291,12 @@ func (c *GinClient) mongoRecordXml(ginCtx *gin.Context, traceId string, requestT if len(dorm.JsonEncodeNoError(requestBody)) > 0 { data.RequestBody = requestBody //【请求】请求主体 } else { - log.Printf("[log.mongoRecordXml]:%s %s\n", data.RequestUri, requestBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[log.mongoRecordXml]:%s %s\n", data.RequestUri, requestBody) } err := c.mongoRecord(data) if err != nil { - log.Printf("[golog.mongoRecordXml]:%s\n", err) + c.zapLog.WithTraceIdStr(traceId).Sugar().Errorf("[golog.mongoRecordXml]:%s\n", err) } } @@ -315,7 +317,7 @@ func (c *GinClient) MongoMiddleware() gin.HandlerFunc { data, _ := ioutil.ReadAll(ginCtx.Request.Body) if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware] %s\n", data) + c.zapLog.WithLogger().Sugar().Infof("[golog.MongoMiddleware] %s\n", data) } // 复用 @@ -351,12 +353,12 @@ func (c *GinClient) MongoMiddleware() gin.HandlerFunc { } if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware.len(jsonBody)] %v\n", len(jsonBody)) + c.zapLog.WithLogger().Sugar().Infof("[golog.MongoMiddleware.len(jsonBody)] %v\n", len(jsonBody)) } if err != nil { if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware.json.Unmarshal] %s %s\n", jsonBody, err) + c.zapLog.WithLogger().Sugar().Infof("[golog.MongoMiddleware.json.Unmarshal] %s %s\n", jsonBody, err) } dataJson = false xmlBody = goxml.XmlDecode(string(data)) @@ -364,8 +366,8 @@ func (c *GinClient) MongoMiddleware() gin.HandlerFunc { } if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware.xmlBody] %s\n", xmlBody) - log.Printf("[golog.MongoMiddleware.jsonBody] %s\n", jsonBody) + c.zapLog.WithLogger().Sugar().Infof("[golog.MongoMiddleware.xmlBody] %s\n", xmlBody) + c.zapLog.WithLogger().Sugar().Infof("[golog.MongoMiddleware.jsonBody] %s\n", jsonBody) } clientIp := gorequest.ClientIp(ginCtx.Request) @@ -396,12 +398,12 @@ func (c *GinClient) MongoMiddleware() gin.HandlerFunc { if dataJson { if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware.mongoRecord.json.request_body] %s\n", jsonBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.MongoMiddleware.mongoRecord.json.request_body] %s\n", jsonBody) } c.mongoRecordJson(ginCtx, traceId, requestTime, jsonBody, responseCode, responseBody, startTime, endTime, clientIp, requestClientIpCountry, requestClientIpRegion, requestClientIpProvince, requestClientIpCity, requestClientIpIsp) } else { if c.mongoConfig.debug { - log.Printf("[golog.MongoMiddleware.mongoRecord.xml.request_body] %s\n", xmlBody) + c.zapLog.WithTraceIdStr(traceId).Sugar().Infof("[golog.MongoMiddleware.mongoRecord.xml.request_body] %s\n", xmlBody) } c.mongoRecordXml(ginCtx, traceId, requestTime, xmlBody, responseCode, responseBody, startTime, endTime, clientIp, requestClientIpCountry, requestClientIpRegion, requestClientIpProvince, requestClientIpCity, requestClientIpIsp) } diff --git a/go.mod b/go.mod index 0ddebfa..0d48a02 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,6 @@ go 1.19 require ( github.com/gin-gonic/gin v1.8.1 github.com/natefinch/lumberjack v2.0.0+incompatible - github.com/rs/zerolog v1.28.0 - github.com/sirupsen/logrus v1.9.0 go.dtapp.net/dorm v1.0.30 go.dtapp.net/goip v1.0.28 go.dtapp.net/gorequest v1.0.28 @@ -49,7 +47,6 @@ require ( github.com/klauspost/compress v1.15.9 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/lib/pq v1.10.6 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -59,6 +56,7 @@ require ( github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda // indirect github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f // indirect github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/ugorji/go/codec v1.2.7 // indirect @@ -95,5 +93,5 @@ require ( modernc.org/libc v1.16.19 // indirect modernc.org/sqlite v1.18.0 // indirect xorm.io/builder v0.3.12 // indirect - xorm.io/xorm v1.3.1 // indirect + xorm.io/xorm v1.3.2 // indirect ) diff --git a/go.sum b/go.sum index f8db772..d1475bf 100644 --- a/go.sum +++ b/go.sum @@ -54,7 +54,6 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -114,7 +113,6 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -316,9 +314,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -326,7 +321,6 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -425,11 +419,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= -github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -661,7 +652,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -909,5 +899,5 @@ sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1 xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= xorm.io/builder v0.3.12 h1:ASZYX7fQmy+o8UJdhlLHSW57JDOkM8DNhcAF5d0LiJM= xorm.io/builder v0.3.12/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= -xorm.io/xorm v1.3.1 h1:z5egKrDoOLqZFhMjcGF4FBHiTmE5/feQoHclfhNidfM= -xorm.io/xorm v1.3.1/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= +xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM= +xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= diff --git a/logrus.console.go b/logrus.console.go deleted file mode 100644 index 490ebbc..0000000 --- a/logrus.console.go +++ /dev/null @@ -1,35 +0,0 @@ -package golog - -import ( - "context" - "github.com/sirupsen/logrus" - "go.dtapp.net/gotime" - "go.dtapp.net/gotrace_id" -) - -type LogRusConsole struct { - logger *logrus.Logger // 日志服务 - entry *logrus.Entry // 日志 -} - -// NewLogRusConsole 初始化控制台 -func NewLogRusConsole() *LogRusConsole { - - lrc := &LogRusConsole{} - lrc.logger = logrus.New() - - // 设置文件名和方法信息 - lrc.logger.SetReportCaller(true) - - lrc.logger.SetFormatter(&logrus.TextFormatter{ - ForceColors: true, - TimestampFormat: gotime.DateTimeFormat, - }) - - return lrc -} - -// WithTraceId 跟踪编号 -func (lrc *LogRusConsole) WithTraceId(ctx context.Context) *logrus.Entry { - return lrc.logger.WithField("trace_id", gotrace_id.GetTraceIdContext(ctx)) -} diff --git a/logrus.go b/logrus.go deleted file mode 100644 index 9dbbd7d..0000000 --- a/logrus.go +++ /dev/null @@ -1,208 +0,0 @@ -package golog - -import ( - "context" - "fmt" - "github.com/sirupsen/logrus" - "go.dtapp.net/gotime" - "go.dtapp.net/gotrace_id" - "io" - "log" - "os" - "path" -) - -type LogRusLogConfig struct { - LogPath string // 日志文件路径 - LogInConsole bool // 是否同时输出到控制台 -} - -type LogRusLog struct { - config *LogRusLogConfig // 配置 - logger *logrus.Logger // 日志服务 - entry *logrus.Entry // 日志 - level logrus.Level // 日志等级 -} - -func NewLogRusLog(config *LogRusLogConfig) *LogRusLog { - - lr := &LogRusLog{config: config} - lr.logger = logrus.New() - - // 设置为json格式 - lr.logger.SetFormatter(&logrus.JSONFormatter{ - TimestampFormat: gotime.DateTimeFormat, - }) - - // 需要保存到文件 - if lr.config.LogPath != "" { - lr.logger.SetReportCaller(true) - } - - return lr -} - -// 跟踪编号 -func (lr *LogRusLog) withTraceId(ctx context.Context) *LogRusLog { - lr.entry = lr.logger.WithField("trace_id", gotrace_id.GetTraceIdContext(ctx)) - return lr -} - -// Print 打印 -func (lr *LogRusLog) Print(ctx context.Context, args ...interface{}) { - lr.withTraceId(ctx) - lr.entry.Print(args...) -} - -// Printf 打印 -func (lr *LogRusLog) Printf(ctx context.Context, format string, args ...interface{}) { - lr.withTraceId(ctx) - lr.entry.Printf(format, args...) -} - -// Println 打印 -func (lr *LogRusLog) Println(ctx context.Context, args ...interface{}) { - lr.withTraceId(ctx) - lr.entry.Println(args...) -} - -// Panic 记录日志,然后panic -func (lr *LogRusLog) Panic(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Panic(args...) -} - -// Panicf 记录日志,然后panic -func (lr *LogRusLog) Panicf(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Panicf(format, args...) -} - -// Fatal 有致命性错误,导致程序崩溃,记录日志,然后退出 -func (lr *LogRusLog) Fatal(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Fatal(args...) -} - -// Fatalf 有致命性错误,导致程序崩溃,记录日志,然后退出 -func (lr *LogRusLog) Fatalf(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Fatalf(format, args...) -} - -// Error 错误日志 -func (lr *LogRusLog) Error(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Error(args...) -} - -// Errorf 错误日志 -func (lr *LogRusLog) Errorf(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Errorf(format, args...) -} - -// Warn 警告日志 -func (lr *LogRusLog) Warn(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Warn(args...) -} - -// Warnf 警告日志 -func (lr *LogRusLog) Warnf(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Warnf(format, args...) -} - -// Info 核心流程日志 -func (lr *LogRusLog) Info(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Info(args...) -} - -// Infof 核心流程日志 -func (lr *LogRusLog) Infof(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Infof(format, args...) -} - -// Debug debug日志(调试日志) -func (lr *LogRusLog) Debug(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Debug(args...) -} - -// Debugf debug日志(调试日志) -func (lr *LogRusLog) Debugf(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Debugf(format, args...) -} - -// Trace 粒度超细的,一般情况下我们使用不上 -func (lr *LogRusLog) Trace(ctx context.Context, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Debug(args...) -} - -// Tracef 粒度超细的,一般情况下我们使用不上 -func (lr *LogRusLog) Tracef(ctx context.Context, format string, args ...interface{}) { - lr.setOutPutFile() - lr.withTraceId(ctx) - lr.entry.Tracef(format, args...) -} - -// https://www.fushengwushi.com/archives/1397 -// https://blog.csdn.net/oscarun/article/details/114295955 -// https://juejin.cn/post/6974353191974469668 -func (lr *LogRusLog) setOutPutFile() { - - // 是否保存到文件 - if lr.config.LogPath == "" { - return - } - - // 判断文件夹 - if _, err := os.Stat(lr.config.LogPath); os.IsNotExist(err) { - err = os.MkdirAll(lr.config.LogPath, 0777) - if err != nil { - panic(fmt.Errorf("create log dir '%s' error: %s", lr.config.LogPath, err)) - } - } - - // 日志名 - fileName := path.Join(lr.config.LogPath, "logrus."+gotime.Current().SetFormat(gotime.ShortDateFormat)+".log") - - file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) - - // 是否同时输出到控制台 - if lr.config.LogInConsole { - lr.logger.SetOutput(os.Stdout) - writers := []io.Writer{ - file, - os.Stdout, - } - fileAndStdoutWriter := io.MultiWriter(writers...) - if err == nil { - lr.logger.SetOutput(fileAndStdoutWriter) - } else { - log.Printf("无法记录到文件 %s\n", fileName) - } - } else { - lr.logger.SetOutput(file) - } - - return -} diff --git a/zap.console.go b/zap.console.go deleted file mode 100644 index e58557d..0000000 --- a/zap.console.go +++ /dev/null @@ -1,46 +0,0 @@ -package golog - -import ( - "context" - "go.dtapp.net/gotrace_id" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "os" -) - -type ZapConsole struct { - logger *zap.Logger // 日志服务 -} - -func NewZapConsole() *ZapConsole { - - zc := &ZapConsole{} - - zc.logger = zap.New(zapcore.NewCore( - zapcore.NewConsoleEncoder(zapcore.EncoderConfig{}), - zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), - zap.InfoLevel, - )) - - return zc -} - -// 跟踪编号 -func (zc *ZapConsole) getTraceId(ctx context.Context) zap.Field { - traceId := gotrace_id.GetTraceIdContext(ctx) - if traceId == "" { - return zap.Field{} - } else { - return zap.String("trace_id", traceId) - } -} - -// Print 打印 -func (zc *ZapConsole) Print(ctx context.Context, args ...interface{}) { - zc.logger.Sugar().Info(args, zc.getTraceId(ctx)) -} - -// Printf 打印 -func (zc *ZapConsole) Printf(ctx context.Context, template string, args ...interface{}) { - zc.logger.Sugar().Infof(template, args, zc.getTraceId(ctx)) -} diff --git a/zap.go b/zap.go index 5e6dc5b..95d8647 100644 --- a/zap.go +++ b/zap.go @@ -3,6 +3,8 @@ package golog import ( "context" "github.com/natefinch/lumberjack" + "go.dtapp.net/gotime" + "go.dtapp.net/gotrace_id" "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" @@ -12,63 +14,39 @@ import ( type ZapLogConfig struct { LogPath string // 日志文件路径 LogName string // 日志文件名 - LogLevel string // 日志级别 debug/info/warn/error,debug输出:debug/info/warn/error日志。 info输出:info/warn/error日志。 warn输出:warn/error日志。 error输出:error日志。 - MaxSize int // 单个文件大小,MB - MaxBackups int // 保存的文件个数 - MaxAge int // 保存的天数 0=不删除 - Compress bool // 压缩 + MaxSize int // 单位为MB,默认为512MB + MaxBackups int // 保留旧文件的最大个数 + MaxAge int // 文件最多保存多少天 0=不删除 + LocalTime bool // 采用本地时间 + Compress bool // 是否压缩日志 + EnableColor bool // level大写染色编码器 JsonFormat bool // 是否输出为json格式 ShowLine bool // 显示代码行 LogInConsole bool // 是否同时输出到控制台 } type ZapLog struct { - config *ZapLogConfig - logger *zap.Logger + config *ZapLogConfig + logger *zap.Logger + zapCore zapcore.Core } func NewZapLog(config *ZapLogConfig) *ZapLog { zl := &ZapLog{config: config} - // 设置日志级别 - var level zapcore.Level - switch zl.config.LogLevel { - case "debug": - level = zap.DebugLevel - case "info": - level = zap.InfoLevel - case "warn": - level = zap.WarnLevel - case "error": - level = zap.ErrorLevel - default: - level = zap.InfoLevel - } - - var ( - syncer zapcore.WriteSyncer - - // 自定义时间输出格式 - customTimeEncoder = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString(t.Format("2006-01-02 15:04:05.000")) - } - - // 自定义日志级别显示 - customLevelEncoder = func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString(level.CapitalString()) - } - ) + var syncer zapcore.WriteSyncer // 定义日志切割配置 hook := lumberjack.Logger{ - Filename: zl.config.LogPath + zl.config.LogName, // 日志文件的位置 - MaxSize: zl.config.MaxSize, // 在进行切割之前,日志文件的最大大小(以MB为单位) + Filename: zl.config.LogPath + zl.config.LogName, // ⽇志⽂件路径 + MaxSize: zl.config.MaxSize, // 单位为MB,默认为512MB MaxBackups: zl.config.MaxBackups, // 保留旧文件的最大个数 - Compress: zl.config.Compress, // 是否压缩 disabled by default + LocalTime: zl.config.LocalTime, // 采用本地时间 + Compress: zl.config.Compress, // 是否压缩日志 } if zl.config.MaxAge > 0 { - hook.MaxAge = zl.config.MaxAge // days + hook.MaxAge = zl.config.MaxAge // 文件最多保存多少天 } // 判断是否控制台输出日志 @@ -78,13 +56,23 @@ func NewZapLog(config *ZapLogConfig) *ZapLog { syncer = zapcore.AddSync(&hook) } + // 自定义时间输出格式 + customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString(t.Format(gotime.DateTimeFormat)) + } + + // 自定义日志级别显示 + customLevelEncoder := func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString(level.CapitalString()) + } + // 定义zap配置信息 - encoderConfig := zapcore.EncoderConfig{ + encoderConf := zapcore.EncoderConfig{ + CallerKey: "caller_line", // 打印文件名和行数 + LevelKey: "level_name", + MessageKey: "msg", TimeKey: "time", - LevelKey: "level", NameKey: "logger", - CallerKey: "line", - MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeTime: customTimeEncoder, // 自定义时间格式 @@ -94,92 +82,51 @@ func NewZapLog(config *ZapLogConfig) *ZapLog { EncodeName: zapcore.FullNameEncoder, } - var encoder zapcore.Encoder - // 判断是否json格式输出 if zl.config.JsonFormat { - encoder = zapcore.NewJSONEncoder(encoderConfig) + zl.zapCore = zapcore.NewCore(zapcore.NewJSONEncoder(encoderConf), + syncer, zap.NewAtomicLevelAt(zapcore.InfoLevel)) } else { - encoder = zapcore.NewConsoleEncoder(encoderConfig) + zl.zapCore = zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConf), + syncer, zap.NewAtomicLevelAt(zapcore.InfoLevel)) } - core := zapcore.NewCore( - encoder, - syncer, - level, - ) - - zl.logger = zap.New(core) - - // 判断是否显示代码行号 - if zl.config.ShowLine { - zl.logger = zl.logger.WithOptions(zap.AddCaller()) - } + zl.logger = zl.withShowLine(zap.New(zl.zapCore)) return zl } -// Panic 记录日志,然后panic -func (zl *ZapLog) Panic(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Panic(args...) -} - -// Panicf 记录日志,然后panic -func (zl *ZapLog) Panicf(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Panicf(template, args...) -} - -// Fatal 有致命性错误,导致程序崩溃,记录日志,然后退出 -func (zl *ZapLog) Fatal(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Fatal(args...) -} - -// Fatalf 有致命性错误,导致程序崩溃,记录日志,然后退出 -func (zl *ZapLog) Fatalf(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Fatalf(template, args...) -} - -// Error 错误日志 -func (zl *ZapLog) Error(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Error(args...) -} - -// Errorf 错误日志 -func (zl *ZapLog) Errorf(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Errorf(template, args...) -} - -// Warn 警告日志 -func (zl *ZapLog) Warn(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Warn(args...) -} - -// Warnf 警告日志 -func (zl *ZapLog) Warnf(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Warnf(template, args...) -} - -// Info 核心流程日志 -func (zl *ZapLog) Info(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Info(args...) -} - -// Infof 核心流程日志 -func (zl *ZapLog) Infof(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Infof(template, args...) -} - -// Debug debug日志(调试日志) -func (zl *ZapLog) Debug(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Debug(args...) -} - -// Debugf debug日志(调试日志) -func (zl *ZapLog) Debugf(ctx context.Context, template string, args ...interface{}) { - zl.logger.Sugar().Debugf(template, args...) -} - -// Trace 粒度超细的,一般情况下我们使用不上 -func (zl *ZapLog) Trace(ctx context.Context, args ...interface{}) { - zl.logger.Sugar().Debug(args...) +// 判断是否显示代码行号 +func (zl *ZapLog) withShowLine(logger *zap.Logger) *zap.Logger { + if zl.config.ShowLine { + logger = logger.WithOptions(zap.AddCaller()) + } + return logger +} + +// WithLogger 跟踪编号 +func (zl *ZapLog) WithLogger() *zap.Logger { + return zl.logger +} + +// WithTraceId 跟踪编号 +func (zl *ZapLog) WithTraceId(ctx context.Context) *zap.Logger { + logger := zl.logger + logger = logger.With(zapcore.Field{ + Key: "trace_id", + Type: zapcore.StringType, + String: gotrace_id.GetTraceIdContext(ctx), + }) + return logger +} + +// WithTraceIdStr 跟踪编号 +func (zl *ZapLog) WithTraceIdStr(traceId string) *zap.Logger { + logger := zl.logger + logger = logger.With(zapcore.Field{ + Key: "trace_id", + Type: zapcore.StringType, + String: traceId, + }) + return logger } diff --git a/zerolog.console.go b/zerolog.console.go deleted file mode 100644 index aff3274..0000000 --- a/zerolog.console.go +++ /dev/null @@ -1,46 +0,0 @@ -package golog - -import ( - "context" - "github.com/rs/zerolog" - "go.dtapp.net/gotime" - "go.dtapp.net/gotrace_id" -) - -type ZeroLogConsole struct { - logger zerolog.Logger // 日志服务 - w zerolog.ConsoleWriter // 日志 -} - -// NewZeroLogConsole 初始化控制台 -func NewZeroLogConsole() *ZeroLogConsole { - - zlc := &ZeroLogConsole{} - - zlc.w = zerolog.NewConsoleWriter() - zlc.w.TimeFormat = gotime.DateTimeFormat - - return zlc -} - -// 跟踪编号 -func (zlc *ZeroLogConsole) withTraceId(ctx context.Context) { - traceId := gotrace_id.GetTraceIdContext(ctx) - if traceId == "" { - zlc.logger = zerolog.New(zlc.w).With().Timestamp().Logger() - } else { - zlc.logger = zerolog.New(zlc.w).With().Str("trace_id", gotrace_id.GetTraceIdContext(ctx)).Timestamp().Logger() - } -} - -// Print 打印 -func (zlc *ZeroLogConsole) Print(ctx context.Context, v ...interface{}) { - zlc.withTraceId(ctx) - zlc.logger.Print(v...) -} - -// Printf 打印 -func (zlc *ZeroLogConsole) Printf(ctx context.Context, format string, v ...interface{}) { - zlc.withTraceId(ctx) - zlc.logger.Printf(format, v...) -} diff --git a/zerolog.go b/zerolog.go deleted file mode 100644 index 9175a62..0000000 --- a/zerolog.go +++ /dev/null @@ -1,88 +0,0 @@ -package golog - -import ( - "github.com/natefinch/lumberjack" - "github.com/rs/zerolog" - "io" - "time" -) - -type ZeroLogLog struct { -} - -type ( - Logger = *zerolog.Logger - Level = zerolog.Level -) - -var ( - DebugLevel = zerolog.DebugLevel - InfoLevel = zerolog.InfoLevel - WarnLevel = zerolog.WarnLevel - ErrorLevel = zerolog.ErrorLevel -) - -// Config 可用在配置文件中 -type Config struct { - Filename string // 日志文件 - MaxSize int // megabytes - MaxBackups int // MaxBackups - MaxAge int // days - Fields map[string]string // slog的初始化字段(session) - IsJSON bool // 默认是非json格式 -} - -// New 日常使用的log, 建议使用json效率更高 -func New(c Config) Logger { - // init zerolog format - zerolog.TimeFieldFormat = "2006-01-02T15:04:05.000" - zerolog.DurationFieldInteger = true - zerolog.TimestampFieldName = "timestamp" - zerolog.DurationFieldUnit = time.Millisecond - - out := &lumberjack.Logger{ - Filename: c.Filename, - MaxSize: c.MaxSize, // megabytes - MaxBackups: c.MaxBackups, // MaxBackups - MaxAge: c.MaxAge, // days - LocalTime: true, // 这个需要设置, 不然日志文件的名字就是UTC时间 - } - - var zout io.Writer - if c.IsJSON { - zout = out - } else { - w := zerolog.NewConsoleWriter() - w.TimeFormat = "2006-01-02T15:04:05.000" - w.NoColor = true - w.FormatLevel = formatLevel - w.Out = out - zout = w - } - - zc := zerolog.New(zout).With().Timestamp() - for k, v := range c.Fields { - zc = zc.Str(k, v) - } - slog := zc.Logger() - return &slog -} - -// NewConsole 创建终端日志格式 -func NewConsole() Logger { - w := zerolog.NewConsoleWriter() - w.TimeFormat = "01-02T15:04:05" - w.NoColor = true - w.FormatLevel = formatLevel - log := zerolog.New(w).With().Timestamp().Logger() - return &log -} - -// formatLevel 不用默认的, 用比较直观的 -// 参考: https://github.com/rs/zerolog/blob/master/console.go#L315 -func formatLevel(i interface{}) string { - if ll, ok := i.(string); ok { - return ll - } - return "" // 异常时候, level为空 -}