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的配置文件,如下:

[kafka]
address=127.0.0.1:9092

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

package mainimport ("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())
}

输出结果为:
在这里插入图片描述

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

[kafka]
address=127.0.0.1:9092[collect]
logfile_path:G:\goproject\-goroutine-\log-agent\log\log1

示例代码:

package mainimport ("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,以及它在项目中所起到的作用,下篇见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12. MyBatis(二)

源码位置:MyBatis_demo 上篇文章我们学习了MyBatis的定义以及增删查改操作,并且学习了如何在xml文件中编写SQL时使用#{}的方式将参数和对象的属性映射到SQL语句中,上篇的内容已经足以应对大部分场景,本篇文章我们就要学习一下MyBa…

uniapp+vue3监听输入框内容watch

代码 <view class"searchBox"><view class"searchLeft"><wh-icon name"search" size"40"></wh-icon><input type"text" placeholder"请输入搜索内容" v-model"search" /&g…

基础算法---二分查找

文章目录 基本思想1.数的范围2.搜索旋转排序数组3.搜索插入位置4.x的平方根总结 基本思想 二分查找的必要条件并不是单调&#xff0c;而是当我给定一个边界条件&#xff0c;然后左边满足这个边界条件&#xff0c;右边不满足这个边界条件&#xff0c;然后可以查找这个临界点&am…

华火电燃灶:烹饪艺术与科技创新的完美融合

华火电燃灶&#xff0c;以纯净电力激发明火之美&#xff0c;无须燃气&#xff0c;尽释碳负。每一道佳肴背后&#xff0c;都是对安全与健康的无声誓言&#xff0c;为家庭温馨瞬间添上一抹灿烂。从宝贝初声啼哭到晚年宁静美好&#xff0c;华火见证家的每一次幸福团聚&#xff0c;…

DevOps流程的简单总结

DevOps流程图&#xff1a; DevOps流程包含&#xff1a;计划&#xff08;plan&#xff09;、编码(code)、编译(build)、测试(test)、发布(release)、部署(deploy)、运营(operate)、监控&#xff08;monitor&#xff09;&#xff0c;这是一个循环的过程。DevOps是依托容器、自动化…

流程控制:goto语句,模拟switch语句

示例&#xff1a; /*** brief how about goto-switch? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>static …

涉密人员离职,如何一键锁定他的电脑屏幕

在任何情况下&#xff0c;保护企业数据的安全性和机密性都是非常重要的。如果涉密人员离职&#xff0c;应该遵循相关的保密协议和规定&#xff0c;确保企业数据的完整性和安全性。同时&#xff0c;也应该对员工进行适当的培训和教育&#xff0c;提高他们的安全意识和技能水平。…

【c++】cpp数学库函数、随机数和时间库函数

&#xff08;1&#xff09;cpp数学库函数 #include <iostream>using namespace std;#include <cmath> //数学函数库的头文件#define pi 3.1415926 //定义一个常量π int main() {cout << "平方数:pow(3, 2) :" << pow(3, 2) << endl;…

开源AI Agent框架的选择

在选择开源AI Agent框架时,首先需要考虑的是框架的开发优先级、功能特性以及社区支持情况。SuperAGI是一个开发者优先的开源自主AI代理框架,它使开发人员能够快速可靠地构建、管理和运行有用的代理12。这表明SuperAGI可能是一个适合需要快速迭代和高度自定义能力的项目的良好…

selenium‘拟人包装‘设置

1、设置header,proxy 1.1关于user-agent 输入about:version 找到user-agent: import requests # 引用requests库 from selenium import webdriver#载入浏览器驱动#header&#xff0c;proxy设置 optionswebdriver.ChromeOptions()#实例化浏览器参数设置options.add_argument…

git基础教程(52).git/config的’remote’和’branch’部分的理解

文章目录 .git/config文件简介‘remote’部分‘branch’部分.git/config文件简介 在使用Git进行版本控制时,每个仓库都会有一个名为.git的隐藏文件夹,其中包含了Git的配置信息和版本记录等重要数据。其中,.git/config文件是每个仓库的配置文件,记录了与远程仓库的连接和本…

水电远程预付费系统:创新与便利的融合

1.系统概述 水电远程预付费系统是一种现代化的管理工具&#xff0c;它通过先进的信息技术实现了水电费用的预先支付和远程管理。这种系统不仅提高了服务效率&#xff0c;也为用户带来了极大的便利&#xff0c;减少了传统抄表和收费过程中的诸多不便。 2.功能特性 2.1实时计量…

pycharm创建的项目

pycharm生成django templates删出 settings.py

nvidia-smi CUDA Version:N/A

问题 nvidia-smi显示&#xff1a;CUDA Version:N/A nvidia-smi -a显示&#xff1a;CUDA Version: Not Found 解决方法 查看Nvidia驱动版本 nvidia-smi如下图&#xff0c;版本为530.41.03 搜索cuda库 apt search libcuda注&#xff1a;不同的源&#xff0c;同一个库的命…

【JavaSE】JDK17的一些特性

前言 从springboot3.0开始&#xff0c;已经不⽀持JDK8了 选⽤Java17&#xff0c;概括起来主要有下⾯⼏个主要原因 JDK17是LTS(⻓期⽀持版)&#xff0c;可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版&#xff08;JDK9-JDK16&#xff09; 去其糟粕&#xff0c;取其精华的版本JDK17…

用友 NC showcontent SQL注入漏洞复现

0x01 产品简介 用友NC是由用友公司开发的一套面向大型企业和集团型企业的管理软件产品系列。这一系列产品基于全球最新的互联网技术、云计算技术和移动应用技术&#xff0c;旨在帮助企业创新管理模式、引领商业变革。 0x02 漏洞概述 用友NC /ebvp/infopub/showcontent 接口处…

AndroidStudio右下角显示内存使用情况

目录 一.具体效果 二.4.0以下版本 三.4.0以上版本 四.增加内存配置 一.具体效果 二.4.0以下版本 1.打开 Android Studio. 2.进入设置界面。点击 Android Studio 左上角的“File”&#xff0c;然后选择“Settings” 3.在设置界面中&#xff0c;选择“Appearance & Beha…

python中的传参(传副本)、传引用和全局变量与局部变量

文章目录 前言1、全局变量与局部变量2、python函数的传参2.1 实参与形参2.2 可变数据与不可变数据2.3 传值(假的传值)与传引用2.3.1 传值(本质上还是传引用---由于python不可变数据的特性就变成和C语言里面传值的效果一样了)示例一:对于不可变数据类型,如果你将一个变量作…

如何配置.gitignore文件

文章目录 如何配置.gitignore文件1..gitignore语法2.创建.gitignore文件所遵循的原则参考 如何配置.gitignore文件 在使用Git的时候&#xff0c;我们总会遇到不想要提交的文件或者文件夹&#xff0c;这时我们便可以通过配置.gitignore文件来让Git忽略我们项目中相应的文件或者…

16-NVS Iterators (迭代器)

ESP32-S3 NVS迭代器 什么是NVS迭代器&#xff1f;&#x1f914; ESP32-S3的NVS库提供了迭代器&#xff0c;允许你根据指定的分区名称、命名空间和数据类型轮询NVS中存储的键值对。使用方法类似于c里的迭代器&#xff08;iterator&#xff09;用于遍历容器&#xff0c;而NVS的…