go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端

前言

从这篇文章开始我们就正式进入了日志收集系统的编写,后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧!

需要实现的功能

我们要收集指定目录下的日志文件,将它们发送到Kafka中

实现的步骤

  • 读取配置文件,寻找日志路径
  • 初始化服务
  • 根据日志路径去利用tail来收集日志
  • 将收集到的日志利用sarama发送到Kafka中

读取配置文件

go-ini包

  • go-ini包的安装

    包的地址为"github.com/go-ini/ini",安装可以基于go mod来使用go mod tidy或者go get github.com/go-ini/ini来进行安装

  • 包的使用

    由于篇幅有限,这里对于包的实现不做过多赘述,可以参考矿方文档,文档里面作者将该包的使用方法讲解的非常好,博主这里就不班门弄斧了,官方文档的地址如

    下:

    超赞的 Go 语言 INI 文件操作

  • 代码示例:

    首先我们定义一个config.ini的配置文件,如下:

text 复制代码
[kafka]
address=127.0.0.1:9092

然后我们尝试提取出Kafka的address:

go 复制代码
package main

import (
	"fmt"
	"github.com/go-ini/ini"
	"github.com/sirupsen/logrus"
)

func main() {
	cfg, err := ini.Load("G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini")//读取配置文件
	if err != nil {
		logrus.Error("load config.ini error!,err:", err) //日志中打印错误信息
	}
	fmt.Println(cfg.Section("kafka").Key("address").String())
}

输出结果为:

当然我们还可以将配置文件的配置有谁到结构体中,首先还是我们的配置文件:

text 复制代码
[kafka]
address=127.0.0.1:9092

[collect]
logfile_path:G:\goproject\-goroutine-\log-agent\log\log1

示例代码:

go 复制代码
package main

import (
	"fmt"
	"github.com/go-ini/ini"
)

type Config struct {
	Kafakaddress Kafkaddress `ini:"kafka"`
	LogFilePath  LogFilePath `ini:"collect"`
}

type Kafkaddress struct {
	Addr string `ini:"address""`
}

type LogFilePath struct {
	Path string `ini:"logfile_path"`
}

func main() {
	var configObj = new(Config) //生成指针便于参数传递
	err := ini.MapTo(configObj, "G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini")
	if err != nil {
		fmt.Println("log config failed,err:", err)
	}
	fmt.Println(configObj.LogFilePath, configObj.Kafakaddress)
}

输出结果为:

结语

对读取配置文件就讲到这里了。下一篇文章我们就开始探寻如何初始化Kafka和tail的服务,以及介绍什么是etcd,以及它在项目中所起到的作用,下篇见!

相关推荐
薛定谔的猫喵喵8 小时前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up8 小时前
Python 数据分析入门
开发语言·python·数据分析
码界筑梦坊8 小时前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
多恩Stone8 小时前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
李日灐8 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
Risehuxyc8 小时前
备份三个PHP程序
android·开发语言·php
lly2024068 小时前
PHP Error: 常见错误及其解决方法
开发语言
网安墨雨8 小时前
Python自动化一------pytes与allure结合生成测试报告
开发语言·自动化测试·软件测试·python·职场和发展·自动化
毕设源码李师姐8 小时前
计算机毕设 java 基于 java 的图书馆借阅系统 智能图书馆借阅综合管理平台 基于 Java 的图书借阅与信息管理系统
java·开发语言·课程设计
忆~遂愿8 小时前
Runtime 上下文管理:计算实例的生命周期、延迟最小化与上下文切换优化
java·大数据·开发语言·人工智能·docker