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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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 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())
}

输出结果为:

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

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

示例代码:

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2天前
|
编译器 Go 开发者
go语言中导入相关包
【11月更文挑战第1天】
11 3
|
1天前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
9 1
|
28天前
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
20 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
22天前
|
存储 Go 数据库
Go语言Context包源码学习
【10月更文挑战第21天】Go 语言中的 `context` 包用于在函数调用链中传递请求上下文信息,支持请求的取消、超时和截止时间管理。其核心接口 `Context` 定义了 `Deadline`、`Done`、`Err` 和 `Value` 方法,分别用于处理截止时间、取消信号、错误信息和键值对数据。包内提供了 `emptyCtx`、`cancelCtx`、`timerCtx` 和 `valueCtx` 四种实现类型,满足不同场景需求。示例代码展示了如何使用带有超时功能的上下文进行任务管理和取消。
|
2月前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
43 3
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
104 0
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
53 0
|
3月前
|
监控 Go 开发者
掌握Go语言中的日志管理
【8月更文挑战第31天】
34 0
|
Go 调度 Python
golang 服务平滑重启小结
背景 golang 程序平滑重启框架 supervisor 出现 defunct 原因 使用 master/worker 模式 背景 在业务快速增长中,前期只是验证模式是否可行,初期忽略程序发布重启带来的暂短停机影响。
1604 0
|
2天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。