项目地址
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
如何使用
- 更改要输出kafka的地址和对应的Topic并且对应地址的kafka启动,主题创建。 *kafka输出地址:在etc/log.yaml中配置kafka的地址和主题。***kafka写入返回结果位置 log/kafka/**默认日志输出文件位置:log/
- 运行main函数,测试两个级别Error和Info级别的日志输出,并查看/log下的日志文件和log/kafka下面的日志输出
- 查看log/kafka返回结果和log下的日志文件写入结果
其他功能介绍
在创建kafkaHook的时候,默认采用异步生产的方式,避免等待kafka响应带来的延迟,可以更改设置为同步生产方式。传入参数false。
kafka采用的是轮询生产策略,并且ACK参数默认为-1(等待所有分区写入再发送下一条消息)
main函数结束的过程中,应先结束监听kafka响应的协程,通过采用优雅停止的方式,当监听到结束信号,管道通知监听协程关闭,并退出。
版权归原作者 Yeppy29 所有, 如有侵权,请联系我们删除。