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()
}
关键点说明
-
首先需要导入
github.com/sirupsen/logrus
和github.com/sebest/logrusly
两个包 -
NewLogglyHook
函数参数说明:- 第一个参数是你的Loggly token
- 第二个参数是主机名(可以任意填写)
- 第三个参数指定发送到Loggly的最低日志级别
- 后续参数是可选的标签(tags)
-
使用
WithFields
可以添加额外的结构化数据到日志中 -
重要提示:程序退出前必须调用
hook.Flush()
,否则可能会丢失最多5秒的日志消息 -
对于
panic
和fatal
级别的日志,会自动调用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
更多关于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")
}
注意事项
-
Token安全:不要将Loggly token硬编码在代码中,应该使用环境变量或配置管理工具。
-
网络问题:确保你的服务器可以访问Loggly的URL,可能需要配置网络代理或防火墙规则。
-
日志级别:合理设置日志级别阈值,避免发送过多低级别日志到Loggly。
-
性能考虑:对于高吞吐量应用,建议使用批量发送模式以减少HTTP请求数量。
-
错误处理:实现适当的错误处理逻辑,考虑日志发送失败时的备选方案。
通过以上配置,你可以轻松地将Logrus日志集成到Loggly服务中,实现集中化的日志管理和分析。