Categorygithub.com/bfmTech/logger-go
repositorypackage
0.0.11
Repository: https://github.com/bfmtech/logger-go.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

logger-go

logger sdk go 版本。将日志内容按照统一格式通过控制台、文件、http上传到阿里云sls,支持缓存上传。

安装

go get -u github.com/bfmTech/logger-go

快速开始

可参考 examples 中的例子

重点:Logger 申明为全局变量,初始化一次!可直接使用下面的logger.go

logger/logger.go (根据情况替换[应用名称]和选择日志上传方式)

package logger

import (
	"errors"
	"log"
	"sync"

	winner_logger "github.com/bfmTech/logger-go"
)

var logger winner_logger.Logger
var once sync.Once

func init() {
	initLogger()
}

func initLogger() winner_logger.Logger {
	var err error
	once.Do(func() {
		logger, err = winner_logger.NewLogger("应用名称", winner_logger.Console) // winner_logger.Console、winner_logger.File、winner_logger.Http
	})

	if err != nil {
		log.Fatal(errors.New("logger初始化失败:" + err.Error()))
	}

	return logger
}

/**
 * @description: 获取logger初始化
 * @return {*}
 */
func GetLogger() winner_logger.Logger {
	if logger == nil {
		return initLogger()
	}

	return logger
}

main.go (logger-demo 为 go.mod module)

package main

import (
	"errors"
	"log"

	winner_logger "github.com/bfmTech/logger-go"
	"logger-demo/logger"
)

func main() {
    // 申明为全局变量
	logger := logger.GetLogger()
    // 程序最终退出时调用
	defer logger.Close()

	logger.Info("这是info消息1", "消息2", "消息3")
	logger.Error(errors.New("出错啦"))
	logger.Access(&winner_logger.AccessLog{})
}

详细说明

日志存储时长:360天

日志上传方式

上传方式使用环境说明
Console容器平台(推荐)日志输出到控制台,Logtail采集
File容器平台日志根据日期保存到指定目录,Logtail采集
Http任意环境(需配置阿里云相关环境变量)http上传日志到阿里sls

日志类型说明
不同的方法的日志类型level不同 可在查询时筛选

-logger.Debug    //支持多个参数,可根据每个参数检索
-logger.Info     //支持多个参数,可根据每个参数检索
-logger.Warn     //支持多个参数,可根据每个参数检索
-logger.Error    //只接受Error对象 (推送钉钉告警消息)
-logger.Access   //access日志,根据方法提示的参数传递

access日志 字段说明

字段类型说明
methodstring请求方法
statusnumberHTTP请求状态
beginTimenumber请求开始时间(秒时间戳)
endTimenumber请求结束时间(秒时间戳)
refererstring请求来源
httpHoststring请求地址
interfacestring请求接口
reqQuerystring请求url参数
reqBodystring请求body参数
resBodystring请求返回参数
clientIpstring客户端IP
userAgentstring用户终端浏览器等信息
reqIdstringheader[X-Request-ID]请求id,用于链路追踪
headersstring其他数据,比如:token

关于链路追踪的实现

  • 获取请求header中的X-Request-ID (Nginx access日志中的req_id) 标记为req_id
  • 所有应用日志记录上req_id
  • 应用上下游调用时,透传 X-Request-ID
  • 可在监控系统中通过req_id在访问日志和应用日志查询到完成的请求链路

上传方式为Http时环境变量说明

变量名说明
LOGGER_ALIYUN_ENDPOINT阿里云sls公网服务入口
LOGGER_ALIYUN_PROJECTNAME阿里云sls项目(Project)
LOGGER_ALIYUN_LOGSTORENAME阿里云sls日志库(Logstore)
LOGGER_ALIYUN_ACCESSKEYIDAccessKey ID,建议使用RAM用户的AccessKey信息。
LOGGER_ALIYUN_ACCESSKEYSECRETAccessKey Secret,建议使用RAM用户的AccessKey信息。

非k8s容器平台File类型的日志使用说明

  • 日志文件存储在NODE_APP_DATA环境变量目录下
  • 存储目录为:指定目录/应用名称/主机名/logger-YYYY-MM-DD.log
  • 设置文件存储天数 logger.SetStoringDays(30)

注意

1、 appName 需唯一,且有意义,用于检索和报错时通知负责人。
2、日志上传方式为FileHttp时,程序退出时必须调用Close(),否则可能导致最后部分日志丢失。
3、日志上传方式为Http时,需要配置阿里云相关环境变量,请联系管理员。
4、日志默认存储时长为360天,如有特殊需求请联系管理员。