经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Go实现整合Logrus实现日志打印
来源:jb51  时间:2022/7/4 12:09:45  对本文有异议

Github:github.com/sirupsen/lo…

1 初步使用

  1. package main
  2. import (
  3. ? "context"
  4. ? "github.com/sirupsen/logrus"
  5. )
  6. ?
  7. func main() {
  8. ? method0()
  9. }
  10. func method0() {
  11. ? logger:= logrus.New()
  12. ? logger.Warning("This is a first log.")
  13. ? ctx := context.WithValue(context.Background(),"key","value")
  14. ? logger.Warning(ctx,"This is a second log.")
  15. }

2 增加标签WithFields

  1. package main?
  2. import (
  3. ? "context"
  4. ? "github.com/sirupsen/logrus"
  5. )
  6. func main() {
  7. ? method1()
  8. }
  9. func method1() {
  10. ? log.WithFields(log.Fields{
  11. ? ? ?"fieldKey": "fieldValue",
  12. ? }).Warning("This is a first field log.")
  13. ?
  14. ? log.WithFields(log.Fields{
  15. ? ? ?"fieldKey": "fieldValue",
  16. ? ? ?"fieldKey2": "fieldValue2",
  17. ? }).Warning("This is a second field log.")
  18. }

3 配置常见参数

  1. package main
  2. import (
  3. ? "context"
  4. ? "github.com/sirupsen/logrus"
  5. ? log "github.com/sirupsen/logrus"
  6. ? "os"
  7. )
  8. ?func main() {
  9. ? method2()
  10. }
  11. func init() {
  12. ? // 日志作为JSON而不是默认的ASCII格式器.
  13. ? log.SetFormatter(&log.JSONFormatter{})
  14. ?
  15. ? // 输出到标准输出,可以是任何io.Writer
  16. ? log.SetOutput(os.Stdout)
  17. ?
  18. ? // 只记录xx级别或以上的日志
  19. ? log.SetLevel(log.TraceLevel)
  20. }
  21. func method2() {
  22. ? log.WithFields(log.Fields{
  23. ? ? ?"animal": "walrus",
  24. ? ? ?"size": ? 10,
  25. ? }).Info("A group of walrus emerges from the ocean")
  26. ?
  27. ? log.WithFields(log.Fields{
  28. ? ? ?"omg": ? ?true,
  29. ? ? ?"number": 122,
  30. ? }).Warn("The group's number increased tremendously!")
  31. ?
  32. ? log.WithFields(log.Fields{
  33. ? ? ?"omg": ? ?true,
  34. ? ? ?"number": 100,
  35. ? }).Fatal("The ice breaks!")
  36. }

Formatter一般分为两种:

  • &log.JSONFormatter{}
  • &log.TextFormatter{}

日志级别一共七种:

  • log.Trace()
  • log.Debug()
  • log.Info()
  • log.Warn()
  • log.Error()
  • log.Fatal()
  • log.Panic()

4 输出日志到文件

  1. package main
  2. import (
  3. "context"
  4. "github.com/sirupsen/logrus"
  5. "os"
  6. )
  7. func main() {
  8. method4()
  9. }
  10. func method4() {
  11. ? var log = logrus.New()
  12. ? file ,err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
  13. ? if err == nil{
  14. ? ? ?log.Out = file
  15. ? }else{
  16. ? ? ?log.Info("Failed to log to file")
  17. ? }
  18. ?
  19. ? log.WithFields(logrus.Fields{
  20. ? ? ?"filename": "123.txt",
  21. ? }).Info("This is a file log")
  22. }

logrus.log文件的内容:

  1. time="2022-01-06T13:04:25+08:00" level=info msg="This is a file log" filename=123.txt\

5 利用Hooks将日志输出到其他地方

  1. import (
  2. ?log "github.com/sirupsen/logrus"
  3. ?"gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
  4. ?logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
  5. ?"log/syslog"
  6. )
  7. func init() {
  8. ?// 使用气闸挂钩来报告错误严重程度或以上的错误一个异常追踪。您可以创建自定义钩子,请参见钩子部分。
  9. ?log.AddHook(airbrake.NewHook(123, "xyz", "production"))
  10. ?
  11. ?hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
  12. ?if err != nil {
  13. ? ?log.Error("Unable to connect to local syslog daemon")
  14. } else {
  15. ? ?log.AddHook(hook)
  16. }
  17. }

只需要在AddHook是添加相应的Hook就可以了

到此这篇关于Go实现整合Logrus实现日志打印的文章就介绍到这了,更多相关Go Logrus日志打印内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号