golang实现Logrus日志发送至Loggly服务的插件库logrusly的使用

golang实现Logrus日志发送至Loggly服务的插件库logrusly的使用

下面是一个完整的示例,展示如何使用logrusly库将Logrus日志发送到Loggly服务:

package main

import (
	"github.com/sirupsen/logrus"
	"github.com/sebest/logrusly"
)

var logglyToken string = "YOUR_LOGGLY_TOKEN" // 替换为你的Loggly token

func main() {
	// 创建新的logrus实例
	log := logrus.New()
	
	// 创建Loggly hook
	// 参数说明:
	// 1. Loggly token
	// 2. 主机名(可以任意填写)
	// 3. 日志级别(只发送Warn及以上级别的日志)
	// 4. 可选的标签(tag1, tag2)
	hook := logrusly.NewLogglyHook(logglyToken, "www.hostname.com", logrus.WarnLevel, "tag1", "tag2")
	
	// 将hook添加到logrus实例
	log.Hooks.Add(hook)

	// 记录带字段的日志
	log.WithFields(logrus.Fields{
		"name": "joe",
		"age":  42,
	}).Error("Hello world!") // 这条日志会被发送到Loggly

	// 对于panic/fatal级别的日志会自动刷新
	// 确保在程序退出前调用Flush(),否则可能会丢失最多5秒的日志消息
	hook.Flush()
}

关键点说明

  1. 首先需要导入github.com/sirupsen/logrusgithub.com/sebest/logrusly两个包

  2. NewLogglyHook函数参数说明:

    • 第一个参数是你的Loggly token
    • 第二个参数是主机名(可以任意填写)
    • 第三个参数指定发送到Loggly的最低日志级别
    • 后续参数是可选的标签(tags)
  3. 使用WithFields可以添加额外的结构化数据到日志中

  4. 重要提示:程序退出前必须调用hook.Flush(),否则可能会丢失最多5秒的日志消息

  5. 对于panicfatal级别的日志,会自动调用Flush

安装

在使用前需要先安装依赖:

go get github.com/sirupsen/logrus
go get github.com/sebest/logrusly

更多关于golang实现Logrus日志发送至Loggly服务的插件库logrusly的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang实现Logrus日志发送至Loggly服务的插件库logrusly的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Logrusly将Logrus日志发送至Loggly

Logrusly是一个Logrus钩子(Hook),可以将Logrus的日志发送到Loggly日志服务。下面我将详细介绍如何使用这个插件库。

安装Logrusly

首先需要安装logrus和logrusly包:

go get github.com/sirupsen/logrus
go get github.com/sebest/logrusly

基本使用方法

package main

import (
	"github.com/sebest/logrusly"
	"github.com/sirupsen/logrus"
)

func main() {
	// 创建Logrus日志实例
	log := logrus.New()

	// 创建Loggly钩子
	// 参数1: Loggly的token
	// 参数2: Loggly的URL (通常为"https://logs-01.loggly.com")
	// 参数3: 日志级别阈值 (这里设置为logrus.InfoLevel及以上级别会被发送)
	hook := logrusly.NewLogglyHook("your-loggly-token", "https://logs-01.loggly.com", logrus.InfoLevel)

	// 添加钩子到Logrus实例
	log.Hooks.Add(hook)

	// 记录日志
	log.Info("This is an info message that will be sent to Loggly")
	log.Warn("This is a warning message")
	log.Error("This is an error message")
}

高级配置

1. 添加自定义字段

func main() {
	log := logrus.New()
	hook := logrusly.NewLogglyHook("your-token", "https://logs-01.loggly.com", logrus.InfoLevel)
	log.Hooks.Add(hook)

	// 添加固定字段
	log.WithFields(logrus.Fields{
		"app":     "my-golang-app",
		"version": "1.0.0",
	}).Info("Application started")

	// 添加动态字段
	log.WithFields(logrus.Fields{
		"user_id": 12345,
		"action":  "login",
	}).Info("User logged in")
}

2. 批量发送日志

Logrusly默认会立即发送每条日志到Loggly。如果你需要批量发送以提高性能:

hook := logrusly.NewLogglyHook("your-token", "https://logs-01.loggly.com", logrus.InfoLevel)

// 设置批量发送参数
hook.BatchingDelay = 5 * time.Second  // 每5秒发送一次
hook.MaxBatchSize = 10               // 或者每10条日志发送一次

log.Hooks.Add(hook)

3. 错误处理

hook := logrusly.NewLogglyHook("your-token", "https://logs-01.loggly.com", logrus.InfoLevel)

// 设置错误处理函数
hook.OnError = func(err error) {
	fmt.Printf("Failed to send log to Loggly: %v\n", err)
	// 这里可以添加重试逻辑或其他错误处理
}

log.Hooks.Add(hook)

完整示例

package main

import (
	"fmt"
	"os"
	"time"

	"github.com/sebest/logrusly"
	"github.com/sirupsen/logrus"
)

func main() {
	// 初始化Logrus
	log := logrus.New()
	log.SetFormatter(&logrus.JSONFormatter{})
	log.SetOutput(os.Stdout) // 同时输出到控制台

	// 配置Loggly钩子
	logglyToken := os.Getenv("LOGGLY_TOKEN")
	if logglyToken == "" {
		log.Fatal("LOGGLY_TOKEN environment variable not set")
	}

	hook := logrusly.NewLogglyHook(
		logglyToken,
		"https://logs-01.loggly.com",
		logrus.InfoLevel,
	)

	// 批量发送配置
	hook.BatchingDelay = 10 * time.Second
	hook.MaxBatchSize = 20
	hook.OnError = func(err error) {
		log.Errorf("Loggly error: %v", err)
	}

	log.Hooks.Add(hook)

	// 记录带有固定字段的日志
	log.WithFields(logrus.Fields{
		"app":     "example-app",
		"version": "1.0.0",
		"env":     os.Getenv("ENV"),
	}).Info("Application starting")

	// 模拟一些日志
	for i := 0; i < 15; i++ {
		log.WithFields(logrus.Fields{
			"iteration": i,
			"timestamp": time.Now().Unix(),
		}).Infof("Processing item %d", i)
		time.Sleep(500 * time.Millisecond)
	}

	log.Info("Application shutting down")
}

注意事项

  1. Token安全:不要将Loggly token硬编码在代码中,应该使用环境变量或配置管理工具。

  2. 网络问题:确保你的服务器可以访问Loggly的URL,可能需要配置网络代理或防火墙规则。

  3. 日志级别:合理设置日志级别阈值,避免发送过多低级别日志到Loggly。

  4. 性能考虑:对于高吞吐量应用,建议使用批量发送模式以减少HTTP请求数量。

  5. 错误处理:实现适当的错误处理逻辑,考虑日志发送失败时的备选方案。

通过以上配置,你可以轻松地将Logrus日志集成到Loggly服务中,实现集中化的日志管理和分析。

回到顶部