Active Record Query Logs
自動將註解附加到具有執行時間資訊標籤的 SQL 查詢中。這可以用於追蹤有問題的 SQL 語句回溯到產生這些語句的應用程式程式碼。
可以在 Rails 組態中透過 config/application.rb
或初始值來啟用查詢記錄
config.active_record.query_log_tags_enabled = true
預設記錄應用程式名稱、控制項名稱和動作,或是工作名稱。預設格式為 SQLCommenter。查詢註解中顯示的標籤可透過 Rails 組態來設定
config.active_record.query_log_tags = [ :application, :controller, :action, :job ]
Active Record 定義可供使用的預設標籤
-
應用程式
-
pid
-
socket
-
db_host
-
資料庫
-
source_location
在載入時,Action Controller 會新增預設標籤
-
控制項
-
動作
-
namespaced_controller
在載入時,Active Job 會新增預設標籤
-
工作
可透過將新註解標籤新增到 tags 陣列中的 Hash
來定義。標籤可以透過設定 Hash
中的 Proc
或 lambda 值有動態內容,而且可以參照儲存在 context
物件中的任何 Rails 值。ActiveSupport::CurrentAttributes
可用於儲存應用程式值。具有 nil
值的標籤會從查詢註解中省略。
會對回傳的字串執行跳脫,但不能使用不受信任的使用者輸入。
範例
config.active_record.query_log_tags = [
:namespaced_controller,
:action,
:job,
{
request_id: ->(context) { context[:controller]&.request&.request_id },
job_id: ->(context) { context[:job]&.job_id },
tenant_id: -> { Current.tenant&.id },
static: "value",
},
]
預設情況下,應用程式名稱、控制項的名稱和動作,或是工作的名稱會使用 SQLCommenter 格式記錄下來。這可以使用 config.active_record.query_log_tags_format 變更
標籤註解可以前置到查詢
ActiveRecord::QueryLogs.prepend_comment = true
對於在請求或工作執行期間內容不會變更的應用程式,這些標籤快取以便重複使用於每個查詢
config.active_record.cache_query_log_tags = true