0


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 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

项目结构

代码地址

Gitee

logMon: log to kafka

如何使用

  1. 更改要输出kafka的地址和对应的Topic并且对应地址的kafka启动,主题创建。 *kafka输出地址:在etc/log.yaml中配置kafka的地址和主题。***kafka写入返回结果位置 log/kafka/**默认日志输出文件位置:log/
  2. 运行main函数,测试两个级别Error和Info级别的日志输出,并查看/log下的日志文件和log/kafka下面的日志输出
  3. 查看log/kafka返回结果和log下的日志文件写入结果

其他功能介绍

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

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

main函数结束的过程中,应先结束监听kafka响应的协程,通过采用优雅停止的方式,当监听到结束信号,管道通知监听协程关闭,并退出。


本文转载自: https://blog.csdn.net/weixin_45653474/article/details/135759834
版权归原作者 Yeppy29 所有, 如有侵权,请联系我们删除。

“go使用logrus进行日志收集并异步发布日志到kafka”的评论:

还没有评论