logger

package
v0.0.0-...-3377335 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2024 License: MulanPSL-2.0 Imports: 13 Imported by: 0

README

logger

业务日志记录模块。

首先要调用初始化函数:

// 参数是一个目录路径,如果为空,则直接输出到标准输出上
logger.Init("[LOG_PATH_DIR]")

然后在gin的中间件中,第一个位置插入logger.Middleware()中间件,用于自动记录日志,并且在每一个请求的gin.Context中,生成一个唯一的标识ID。

在内部业务逻辑中,需要调用如下方法进行日志记录:

logger.Info(ctx, "记录正常信息")
logger.Info(ctx, "记录正常信息 %s %d", "HelloWorld!", 100)
logger.Error(ctx, err, "记录错误")
logger.Fatal(ctx, err, "记录崩溃")

这样会自动将context中的标识ID记录到日志中。

注:github.com/lestrrat-go/file-rotatelogs库,请使用最新的commit号作为版本。

Ignore模块

ignore.go是用来忽略Json序列化结果的一些字段,主要用于日志记录时,某些Json结果中包含非常长的字符串或需要保密的隐私信息等,这些需要被忽略输出。

接口:

  • ReplaceObject:替换通用对象指定字段,必须是可以Json序列化的对象。
  • ReplaceString:替换Json字符串指定字段。
  • DeleteObject:删除通用对象指定字段,必须是可以Json序列化的对象。
  • DeleteString:删除Json字符串指定字段。

其中替换和删除的忽略字段格式如下,参照测试样例

  • "k1": 表示data["k1"]
  • "k1.k2": 表示data["k1"]["k2"]
  • "k1~.k2": "k1"对应一个Json字符串,解码后删除"k2"字段
  • "k1*.k2": "k1"是一个数组,在数组的每个元素对象中删除"k2"字段

样例:

// input = {"a":1}
// result = {"a":"-"}
result := jsonutil.ReplaceObject(input, "-", []string{"a"})

// input = {"a":{"a1": 1}}
// result = {"a":{}}
result := jsonutil.DeleteObject(input, []string{"a.a1"})

// input = {"a":"{\"a1\":1}"}
// result = {"a":"{\"a1\":\"-\"}"}
result := jsonutil.ReplaceObject(input, "-", []string{"a~.a1"})

// input = {"a":[{"a1":1},{"a2":2}]}
// result = {"a":[{},{"a2":2}]}
result := jsonutil.DeleteObject(input, []string{"a*.a1"})

Documentation

Index

Constants

View Source
const IgnoreReplaceStr = "-"

忽略时替换为的字符串

View Source
const KEY_ID = "TRACKIDENTIFIER"

内部记录TrackId时使用的Key值

Variables

View Source
var GlobalRouterConfig = RouterConfig{
	DisableReq:          false,
	DisableRsp:          false,
	HeaderFields:        nil,
	IgnoreReqBodyFields: nil,
	IgnoreRspFields:     nil,
	OutputReqBody:       nil,
}

全局配置项

View Source
var (
	Interval = int64(60) // 输出间隔,单位为秒,默认间隔60秒输出
)

Functions

func DeleteObject

func DeleteObject(obj interface{}, fields []string) string

删除通用对象指定字段,必须是可以Json序列化的对象

func DeleteString

func DeleteString(jsonStr []byte, fields []string) []byte

删除Json字符串指定字段

func Error

func Error(c context.Context, err error, info string, fields ...interface{})

记录错误信息

func Fatal

func Fatal(c context.Context, err error, info string, fields ...interface{})

记录错误信息并推出

func GetTrackId

func GetTrackId(c context.Context) string

获取日志ID

func Info

func Info(c context.Context, info string, fields ...interface{})

记录正常信息

func Init

func Init(logPath string)

初始化日志配置模块

func LoopError

func LoopError(c context.Context, logId string, err error, info string, fields ...interface{})

func LoopFatal

func LoopFatal(c context.Context, logId string, err error, info string, fields ...interface{})

func LoopInfo

func LoopInfo(c context.Context, logId string, info string, fields ...interface{})

func Middleware

func Middleware() gin.HandlerFunc

在路由的设置的第一个中间件

func NewContext

func NewContext() context.Context

生成新的Track对象

func NewTrackId

func NewTrackId() string

生成日志ID

func RemoveLogId

func RemoveLogId(logId string)

func ReplaceObject

func ReplaceObject(obj interface{}, replaceStr string, fields []string) string

替换通用对象指定字段,必须是可以Json序列化的对象

func ReplaceString

func ReplaceString(jsonStr []byte, replaceStr string, fields []string) []byte

替换Json字符串指定字段

func SetRouterConfig

func SetRouterConfig(
	method string,
	baseUrl string,
	apiUrl string,
	config RouterConfig,
)

设置自定义映射信息

func SetRouterConfigDirectly

func SetRouterConfigDirectly(
	method string,
	urlPath string,
	config RouterConfig,
)

设置自定义映射信息

func SetRouterMethodDisabled

func SetRouterMethodDisabled(method string, status bool)

设置整个方法的禁用信息

Types

type ContextHook

type ContextHook struct{}

func (*ContextHook) Fire

func (hook *ContextHook) Fire(entry *logrus.Entry) error

func (*ContextHook) Levels

func (hook *ContextHook) Levels() []logrus.Level

type ResponseBodyWriter

type ResponseBodyWriter struct {
	gin.ResponseWriter
	Body *bytes.Buffer
}

用于替换应答Writer的,记录返回信息

func (ResponseBodyWriter) Write

func (w ResponseBodyWriter) Write(b []byte) (int, error)

type RouterConfig

type RouterConfig struct {
	DisableReq          bool                              // 禁用请求
	DisableRsp          bool                              // 禁用应答
	HeaderFields        []string                          // (通用) 输出的header字段
	IgnoreReqBodyFields []string                          // 忽略的body字段,不同的Content-Type对应不同的处理
	IgnoreRspFields     []string                          // 忽略的rsp字段,不同的Content-Type对应不同的处理
	OutputReqBody       func(*gin.Context, string) string // 自定义输出请求的body函数
}

路由配置信息项

func GetRouterConfig

func GetRouterConfig(method string, urlPath string) RouterConfig

获取路由配置信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL