go使用logrus进行日志收集并异步发布日志到kafka

项目地址

GitHub访问地址:https://github.com/sirupsen/logrus

logrus是什么?

logrus是go语言的一个日志工具框架,可以设置json或者text格式的日志格式,拥有六种日志级别:debug、info、warn、error、fatal和panic。

logrus可以实现什么?

  • 自行扩展的Hook机制:允许使用者通过hook的方式将日志分发到任意地方,比如本地的文件,kafka,es和mq等等(可自行实现)
  • 可选的日志输出格式:logrus内置了两种日志格式,JSON和Text,如果这两个格式不满足需求,可以自己动手实现接口Formatter,来定义自己的日志格式。
  • Field机制:logrus鼓励通过Field机制进行精细化的、结构化的日志记录,而不是通过冗长的消息来记录日志。

输出内容展示

通过Logrus.WithFields来自定义结构化输出记录

go使用logrus进行日志收集并异步发布日志到kafka

go使用logrus进行日志收集并异步发布日志到kafka

使用方法

通过 go get 引入 

go get "github.com/sirupsen/logrus"

在需要日志输出的地方进行 logrus.+WithFields+日志级别进行日志输出。

func LogInit() {

	//设置输出为json格式
	logrus.SetFormatter(&logrus.JSONFormatter{})
	//设置输出到日志文件的名称时间格式
	currentTime := time.Now()
	formattedTime := currentTime.Format("2006-01-02_15-04-05")
	//设置追加读写
	fd, err := os.OpenFile("log/"+formattedTime+".log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)

	if err != nil {
		log.Panic(err)
	}

	//设置输出文件
	logrus.SetOutput(fd)
	//设置日志级别
	logrus.SetLevel(logrus.InfoLevel)

	//获取kafka实例配置
	KafkaConfig := KafkaInit()

	//Hook    isAsync=true代表创建异步生产者
	kafka.Init()
	kafkaHook := kafka.NewKafkaHook(KafkaConfig.Topic, KafkaConfig.IPPort, true)
	logrus.AddHook(kafkaHook)

}

项目演示:记录运行错误日志记录到本地文件并异步发送到kafka

项目结构

go使用logrus进行日志收集并异步发布日志到kafka

代码地址

Gitee

logMon: log to kafka

如何使用

  1. 更改要输出kafka的地址和对应的Topic并且对应地址的kafka启动,主题创建。

    kafka输出地址:在etc/log.yaml中配置kafka的地址和主题。

    kafka写入返回结果位置 log/kafka/

    默认日志输出文件位置:log/

    go使用logrus进行日志收集并异步发布日志到kafka

  2. 运行main函数,测试两个级别Error和Info级别的日志输出,并查看/log下的日志文件和log/kafka下面的日志输出go使用logrus进行日志收集并异步发布日志到kafka
  3. 查看log/kafka返回结果和log下的日志文件写入结果go使用logrus进行日志收集并异步发布日志到kafka

go使用logrus进行日志收集并异步发布日志到kafka

其他功能介绍

在创建kafkaHook的时候,默认采用异步生产的方式,避免等待kafka响应带来的延迟,可以更改设置为同步生产方式。传入参数false。

kafka采用的是轮询生产策略,并且ACK参数默认为-1(等待所有分区写入再发送下一条消息)

go使用logrus进行日志收集并异步发布日志到kafkamain函数结束的过程中,应先结束监听kafka响应的协程,通过采用优雅停止的方式,当监听到结束信号,管道通知监听协程关闭,并退出。

go使用logrus进行日志收集并异步发布日志到kafka

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/b1150a702d.html