项目作者: GotaX

项目描述 :
Aliyun Log Hook for Logrus
高级语言: Go
项目地址: git://github.com/GotaX/logrus-aliyun-log-hook.git
创建时间: 2020-01-06T15:45:43Z
项目社区:https://github.com/GotaX/logrus-aliyun-log-hook

开源协议:MIT License

下载


Aliyun Log Hook for Logrus

godoc reference

此 Hook 用于将通过 logrus 记录的日志发送到阿里云日志服务.

特点:

  • 采用非阻塞设计, 由一个后台线程将日志批量刷到远端日志库.
  • 采用轻量级设计, 直接使用 PutLogs 接口, 不依赖于 github.com/aliyun/aliyun-log-go-sdk
  • 内存占用较低, 大约是直接使用 sdk 的 70%

安装

go get -u github.com/GotaX/logrus-aliyun-log-hook

使用指南

  1. package main
  2. import (
  3. "math/rand"
  4. "os"
  5. "time"
  6. "github.com/sirupsen/logrus"
  7. "github.com/GotaX/logrus-aliyun-log-hook"
  8. )
  9. func main() {
  10. hook, err := slsh.New(slsh.Config{
  11. Endpoint: os.Getenv("ENDPOINT"), // 接入点, 例如: "cn-hangzhou-intranet.log.aliyuncs.com",
  12. AccessKey: os.Getenv("ACCESS_KEY"), // 授权密钥对: key
  13. AccessSecret: os.Getenv("ACCESS_SECRET"), // 授权密钥对: secret
  14. Project: os.Getenv("PROJECT"), // 日志项目名称
  15. Store: os.Getenv("STORE"), // 日志库名称
  16. Topic: "demo", // 日志 __topic__ 字段
  17. Extra: map[string]string{"service": "demo"}, // 日志附加字段, 可选
  18. // 更多配置说明, 参考字段注释
  19. })
  20. if err != nil {
  21. panic(err)
  22. }
  23. logrus.SetLevel(logrus.TraceLevel)
  24. logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
  25. logrus.AddHook(hook)
  26. // 加上这行关闭本地日志输出, 仅写入阿里云日志
  27. // logrus.SetOutput(ioutil.Discard)
  28. time.AfterFunc(5*time.Second, func() { _ = hook.Close() })
  29. for i := 0; i < 10; i++ {
  30. logrus.WithField("n", i).Info("Hi!")
  31. time.Sleep(time.Duration(rand.Intn(3) * int(time.Second)))
  32. }
  33. }

Benchmark

I/O 部分对比, 配置: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz

go test -run ^BeachmarkWriter$ -bench=BenchmarkWriter -count 5 -benchmem

名称 CPU/op alloc/op allocs/op
hook 110µs ± 1% 9.51kB ± 0% 135 ± 0%
sls-sdk 127µs ± 3% 13.4kB ± 0% 165 ± 0%

外部依赖

  1. .
  2. github.com/golang/protobuf/proto
  3. github.com/pierrec/lz4
  4. github.com/sirupsen/logrus