context.go 2.33 KB
Newer Older
hujiebin's avatar
hujiebin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
package mycontext

import (
	"context"
	"git.hilo.cn/hilo-common/mylogrus"
	"github.com/satori/go.uuid"
	"github.com/sirupsen/logrus"
	"strconv"
	"strings"
)

const (
	TRACEID       = "traceId"
	USERID        = "userId"
	EXTERNAL_ID   = "externalId"
	CODE          = "code"
	NICK          = "nick"
	AVATAR        = "avatar"
	COUNTRY       = "country"
	EXTERNALID1   = "externalId1"
	EXTERNALID2   = "externalId2"
	MGRID         = "mgrId"
	DEVICETYPE    = "deviceType"
	DEVICEVERSION = "deviceVersion"
	APP_VERSION   = "appVersion"
	ACTION_RESULt = "actionResult"
	URL           = "url"
	METHOD        = "method"
	IMEI          = "imei"
	LANGUAGE      = "language"
)

/**
 * 主要是完成日志打印
 * @param
 * @return
 **/

type MyContext struct {
	context.Context
	Log *logrus.Entry
	Cxt map[string]interface{}
}

func CreateMyContextWith(traceId interface{}) *MyContext {
	cxt := map[string]interface{}{}
	cxt[TRACEID] = traceId
	return CreateMyContext(cxt)
}

func CreateMyContext(ctx map[string]interface{}) *MyContext {
	var traceId string
	if traceIdTemp, ok := ctx[TRACEID]; ok {
		traceId, ok = traceIdTemp.(string)
	} else {
		traceId = strings.Replace(uuid.NewV4().String(), "-", "", -1)
	}

	var userId string
	if userIdTemp, ok := ctx[USERID]; ok {
		userId = strconv.FormatUint(userIdTemp.(uint64), 10)
	}

	var deviceTypeStr string
	if deviceTypeTemp, ok := ctx[DEVICETYPE]; ok {
		deviceTypeStr, ok = deviceTypeTemp.(string)
	}

	var sAppVersion string
	if appVersionTmp, ok := ctx[APP_VERSION]; ok {
		sAppVersion, ok = appVersionTmp.(string)
	}

	var url string
	if urlTmp, ok := ctx[URL]; ok {
		url, ok = urlTmp.(string)
	}

	var method string
	if methodTmp, ok := ctx[METHOD]; ok {
		method, ok = methodTmp.(string)
	}
	_ctx := context.WithValue(context.Background(), "traceId", traceId)
	_ctx = context.WithValue(_ctx, "userId", userId)
	return &MyContext{
		Context: _ctx,
		Log:     CreateContextLog(userId, traceId, deviceTypeStr, sAppVersion, url, method),
		Cxt:     ctx,
	}
}

/**
 * 创建上下文的日志
 **/
func CreateContextLog(userId string, traceId string, deviceType string, deviceVersion string, url string, method string) *logrus.Entry {
	return mylogrus.MyLog.WithFields(logrus.Fields{
		USERID:      userId,
		TRACEID:     traceId,
		DEVICETYPE:  deviceType,
		APP_VERSION: deviceVersion,
		URL:         url,
		METHOD:      method,
	})
}