当前位置: 首页 > news >正文

go中es(olivere/elastic/v7)增加日志

如何给es增加日志

最常见的做法是:使用标准库的 log.Logger 作为 Logger 实现(它天然支持 Printf 方法),并通过 SetTraceLog 传入,即可开启跟踪日志,打印包括 DSL 在内的完整 HTTP 请求细节。

代码示例如下:

package mainimport ("context""log""os""github.com/olivere/elastic/v7"
)func main() {// 1. 创建一个 Logger 实例(使用标准库的 log.Logger,输出到控制台)// 配置日志前缀和标志(如时间、文件名等)traceLogger := log.New(os.Stdout, "[ES-TRACE] ", log.Ldate|log.Ltime|log.Lshortfile)// 2. 初始化 ES 客户端,通过 SetTraceLog 传入上面的 loggeresClient, err := elastic.NewClient(elastic.SetURL("http://localhost:9200"), // ES 服务地址elastic.SetSniff(false),                 // 本地环境建议关闭 sniffelastic.SetTraceLog(traceLogger),        // 关键:开启跟踪日志,使用自定义 logger// 若有认证,添加:// elastic.SetBasicAuth("elastic", "changeme"),)if err != nil {log.Fatalf("创建 ES 客户端失败: %v", err)}// 3. 执行一个查询(测试跟踪日志)ctx := context.Background()query := elastic.NewMatchQuery("TITLE", "人工智能") // 示例查询// 执行搜索_, err = esClient.Search().Index("example_index"). // 替换为你的索引名Query(query).Size(10).Do(ctx)if err != nil {log.Printf("查询失败: %v", err)return}
}

以上代码效果说明
开启 SetTraceLog 后,客户端会将与 ES 的每一次 HTTP 交互(包括请求方法、URL、请求体 DSL、响应状态等)通过 Logger.Printf 输出。例如

[ES-TRACE] 2023/10/05 15:30:00 main.go:28: POST http://localhost:9200/example_index/_search?size=10
[ES-TRACE] 2023/10/05 15:30:00 main.go:28: Request: {"query":{"match":{"TITLE":{"query":"人工智能"}}}}
[ES-TRACE] 2023/10/05 15:30:00 main.go:28: Response: status=200, body={"took":3,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":2,"relation":"eq"},"max_score":0.87546873,"hits":[...]}}

其中:
• Request: 后面的内容就是完整的 ES 查询 DSL(与 REST API 请求体完全一致)。
• 还会输出请求 URL、响应状态码、响应体等信息,方便调试。

自定义日志

如果需要更灵活的日志格式(如 JSON 格式、脱敏敏感信息),可以自定义实现 elastic.Logger 接口:

// 自定义 Logger
type MyTraceLogger struct {// 可以添加自定义字段,如日志级别、输出目的地等
}// 实现 Printf 方法,满足 elastic.Logger 接口
func (l *MyTraceLogger) Printf(format string, v ...interface{}) {// 自定义日志输出逻辑,例如:// 1. 格式化日志// 2. 脱敏请求体中的敏感字段// 3. 输出到文件或第三方日志系统log.Printf("[自定义ES跟踪] "+format, v...)
}// 使用自定义 Logger
func main() {customLogger := &MyTraceLogger{}esClient, err := elastic.NewClient(elastic.SetURL("http://localhost:9200"),elastic.SetTraceLog(customLogger), // 传入自定义 logger)// ...
}

SetTraceLog 的正确用法是传入一个实现了 elastic.Logger 接口的对象(如标准库 log.Logger 或自定义 logger)。通过这种方式,客户端会自动将包括 DSL 在内的 HTTP 通信细节输出到日志中,效果类似 GORM 的 Debug(),是调试 ES 查询的高效手段。

http://www.dtcms.com/a/581373.html

相关文章:

  • css之动画
  • 域名费用和网站服务器费用是同样的吗解析软件的网站
  • 【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化
  • 求制作网站音乐网站建设规划
  • 免费响应式模板网站网站换空间要重新备案吗
  • 【Rust】时间轮的数据结构于设计模式
  • 解决cryptography库报错【DLL load failed while importing _rust】
  • JASP:一款免费开源的统计软件,SPSS替代产品
  • 【JS Utils】Vue2 自定义计算属性 (兼容 uniapp 和 Vue 2.7 以前版本)
  • React 16
  • 东莞网站建设技术支持南京网站建设 零云建站
  • wordpress通知站点360搜索品牌建设与管理提案
  • Python实现手写数字识别
  • 零成本体验云计算!阿贝云免费服务器深度测评
  • 如何在Mac上同步iPhone短信
  • 网站建设好后有些什么资料软件工程月薪一般多少
  • Fastapi 进阶一:Fastapi依赖注入机制详解
  • Java实用面试经验:接口编程概念与技巧总结
  • 在VMWare上搭建Flume集群
  • vue_day04
  • 深入浅出 SPA/MPA
  • 怎么增加网站的关键词库个人网站申请空间
  • (已发25年8月华为云、51CTO)数组编程:编程的基础数据结构!
  • 北京网站制作设计哪个公司好网站开发人员结构配比
  • 面对未来:企业决策与适应力
  • bat 批处理实现 FFmpeg 命令压缩 MP4
  • openEuler 云原生实战:部署高性能 Redis 集群与压测分析
  • 机器学习-逻辑回归与二分类
  • 老玩家流失?基于数据驱动的游戏用户流失分析与干预策略
  • 做网站的公司名字北京注册网站