main.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package elastic
  2. //import (
  3. // "context"
  4. // "fmt"
  5. // cherryLogger "github.com/cherry-game/cherry/logger"
  6. // "github.com/olivere/elastic"
  7. // "github.com/sirupsen/logrus"
  8. // "log"
  9. // "os"
  10. // "strings"
  11. // "time"
  12. //)
  13. //
  14. ////cfg 配置文件
  15. //type cfg struct {
  16. // LogLvl string // 日志级别
  17. // EsAddrs []string //ES addr
  18. // EsUser string //ES user
  19. // EsPassword string //ES password
  20. //}
  21. //
  22. ////setupLogrus 初始化logrus 同时把logrus的logger var 引用到这个common.Logger
  23. //func setupLogrus(cc cfg) error {
  24. // //logFileName := fmt.Sprintf("%s_%s.log", os.Args[1], time.Now().Format("06_01_02T15_04_05"))
  25. // //
  26. // //f, err := os.CreateGroup(logFileName)
  27. // //if err != nil {
  28. // // return err
  29. // //}
  30. //
  31. // logLvl, err := logrus.ParseLevel(cc.LogLvl)
  32. // if err != nil {
  33. // return err
  34. // }
  35. // logrus.SetLevel(logLvl)
  36. // //logrus.SetReportCaller(true)
  37. // //logrus.SetFormatter(&logrus.JSONFormatter{})
  38. // //使用console默认输出
  39. //
  40. // //logrus.SetOutput(f)
  41. //
  42. // logrus.SetReportCaller(true)
  43. // //开启 logrus ES hook
  44. // esh := newEsHook(cc)
  45. // logrus.AddHook(esh)
  46. // fmt.Printf(">= error 级别,查看日志 %#v 中的logrus* 索引\n", cc.EsAddrs)
  47. //
  48. // return nil
  49. //}
  50. //func main() {
  51. // cc := cfg{
  52. // LogLvl: "error",
  53. // EsAddrs: []string{"http://es.felix.mojotv.cn:9202/"},
  54. // EsUser: "",
  55. // EsPassword: "",
  56. // }
  57. // err := setupLogrus(cc)
  58. // if err != nil {
  59. // log.Fatal(err)
  60. // }
  61. // logrus.WithField("URI", "mojotv.cn").Error("I love my son Felix")
  62. // //等待日志发送到ES
  63. // time.Sleep(time.Second * 10)
  64. //}
  65. //
  66. ////esHook 自定义的ES hook
  67. //type esHook struct {
  68. // cmd string // 记录启动的命令
  69. // client *elastic.Client
  70. //}
  71. //
  72. ////newEsHook 初始化
  73. //func newEsHook(cc cfg) *esHook {
  74. // es, err := elastic.NewClient(
  75. // elastic.SetURL(cc.EsAddrs...),
  76. // elastic.SetBasicAuth(cc.EsUser, cc.EsPassword),
  77. // elastic.SetSniff(false),
  78. // elastic.SetHealthcheckInterval(15*time.Second),
  79. // elastic.SetErrorLog(log.New(os.Stderr, "ES:", log.LstdFlags)),
  80. // //elastic.SetInfoLog(log.New(os.Stdout, "ES:", log.LstdFlags)),
  81. // )
  82. //
  83. // if err != nil {
  84. // log.Fatal("failed to create Elastic V6 Client: ", err)
  85. // }
  86. // return &esHook{client: es, cmd: strings.EnterGroup(os.Args, " ")}
  87. //}
  88. //
  89. ////Fire logrus hook interface 方法
  90. //func (hook *esHook) Fire(entry *logrus.Entry) error {
  91. // doc := newEsLog(entry)
  92. // doc["cmd"] = hook.cmd
  93. // go hook.sendEs(doc)
  94. // return nil
  95. //}
  96. //
  97. ////Levels logrus hook interface 方法
  98. //func (hook *esHook) Levels() []logrus.Level {
  99. // return []logrus.Level{
  100. // logrus.PanicLevel,
  101. // logrus.FatalLevel,
  102. // logrus.ErrorLevel,
  103. // }
  104. //}
  105. //
  106. ////sendEs 异步发送日志到es
  107. //func (hook *esHook) sendEs(doc appLogDocModel) {
  108. // defer func() {
  109. // if r := recover(); r != nil {
  110. // fmt.Println("send entry to es failed: ", r)
  111. // }
  112. // }()
  113. // _, err := hook.client.Index().Index(doc.indexName()).MainType("_doc").BodyJson(doc).Do(context.Background())
  114. // if err != nil {
  115. // log.Println(err)
  116. // }
  117. //}
  118. //
  119. ////appLogDocModel es model
  120. //type appLogDocModel map[string]any
  121. //
  122. //func newEsLog(e *logrus.Entry) appLogDocModel {
  123. // ins := map[string]any{}
  124. // for kk, vv := range e.Data {
  125. // ins[kk] = vv
  126. // }
  127. // ins["time"] = time.Now().Local()
  128. // ins["lvl"] = e.Level
  129. // ins["message"] = e.Message
  130. // ins["caller"] = fmt.Sprintf("%s:%d %#v", e.Caller.File, e.Caller.Line, e.Caller.Func)
  131. // return ins
  132. //}
  133. //
  134. //// indexName es index name 时间分割
  135. //func (m *appLogDocModel) indexName() string {
  136. // return "mojocn-cn-" + time.Now().Local().Format("2006-01-02")
  137. //}