:::info 可以。 :::

日志参数 - sqls

  1. {
  2. "level":"info", // 日志级别
  3. "time":"2021-11-21 16:04:50", // 时间
  4. "caller":"core/core.go:474", // 调用位置
  5. "msg":"core-interceptor", // 日志信息
  6. "domain":"go-gin-api[fat]", // 域名或服务名
  7. "method":"GET", // HTTP 请求方式
  8. "path":"/api/admin", // HTTP 请求路径
  9. "http_code":200, // HTTP 状态码
  10. "business_code":0, // 业务状态码
  11. "success":true, // 状态,成功或失败
  12. "cost_seconds":0.001468745, // 耗费时间,单位:秒
  13. "trace_id":"3c9a49f7d8bc0c9f1833", // 当前请求的唯一ID
  14. "trace_info":{
  15. "trace_id":"3c9a49f7d8bc0c9f1833",
  16. "request":{
  17. "ttl":"un-limit",
  18. "method":"GET", // HTTP 请求方法
  19. "decoded_url":"/api/admin", // HTTP 请求路径
  20. "header":{ // HTTP Request Header 信息
  21. ...
  22. },
  23. "body":"" // HTTP Request Body 信息
  24. },
  25. "response":{
  26. "header":{ // HTTP Response Header 信息
  27. ...
  28. },
  29. "body":{ // HTTP Response Body 信息
  30. ...
  31. },
  32. "http_code":200, // HTTP 状态码
  33. "http_code_msg":"OK", // HTTP 状态码信息
  34. "cost_seconds":0.001468488 // 耗费时间,单位:秒
  35. },
  36. "third_party_requests":null, // 请求第三方接口日志
  37. "debugs":null, // Debug 调试信息
  38. "sqls":[ // SQL 执行信息
  39. ...
  40. ],
  41. "redis":[ // Redis 执行信息
  42. ...
  43. ],
  44. "success":true, // 状态,成功或失败
  45. "cost_seconds":0.001468745 // 总耗时,单位:秒
  46. }
  47. }

其中 sqls 中记录的便是 SQL 执行信息,会记录如下信息:

  1. "sqls":[
  2. {
  3. "timestamp":"2021-11-21 16:04:50", // 执行时间
  4. "stack":"xx.go:108", // 发生位置
  5. "sql":"SELECT * FROM `admin` WHERE is_deleted = -1 ORDER BY id DESC LIMIT 10", // 执行的 SQL 语句
  6. "rows_affected":2, // 影响行数
  7. "cost_seconds":0.000364036 // 执行耗时,单位:秒
  8. },
  9. {
  10. "timestamp":"2021-11-21 16:04:50",
  11. "stack":"xx.go:81",
  12. "sql":"SELECT count(*) FROM `admin` WHERE is_deleted = -1 ",
  13. "rows_affected":1,
  14. "cost_seconds":0.000188622
  15. }
  16. ],

如何实现的?

:::info // see internal/repository/mysql/plugin.go
// 原理是使用 grom 插件机制。 :::