log_filter_internal
日誌篩選組件實作一種基於錯誤事件優先順序和錯誤碼的簡單日誌篩選形式。若要影響 log_filter_internal
如何允許或抑制預定用於錯誤日誌的錯誤、警告和資訊事件,請設定 log_error_verbosity
和 log_error_suppression_list
系統變數。
log_filter_internal
是內建的且預設為啟用。如果停用此篩選器,log_error_verbosity
和 log_error_suppression_list
不會生效,因此必須在需要時使用另一個篩選服務執行篩選 (例如,在使用 log_filter_dragnet
時使用個別篩選規則)。如需篩選器設定的資訊,請參閱 第 7.4.2.1 節「錯誤日誌設定」。
預定用於錯誤日誌的事件具有 ERROR
、WARNING
或 INFORMATION
的優先順序。log_error_verbosity
系統變數根據允許寫入日誌的訊息優先順序控制詳細程度,如下表所示。
log_error_verbosity 值 | 允許的訊息優先順序 |
---|---|
1 | 錯誤 |
2 | ERROR 、WARNING |
3 | ERROR 、WARNING 、INFORMATION |
如果 log_error_verbosity
為 2 或更大,伺服器會記錄關於不安全以陳述式為基礎的日誌記錄的陳述式訊息。如果值為 3,伺服器會記錄關於新連線嘗試的已中止連線和拒絕存取錯誤。請參閱 第 B.3.2.9 節「通訊錯誤和中止的連線」。
如果您使用複寫,建議使用 log_error_verbosity
值為 2 或更大,以取得有關正在發生的情況的更多資訊,例如有關網路故障和重新連線的訊息。
如果複本上的 log_error_verbosity
為 2 或更大,複本會在錯誤日誌中列印訊息,以提供有關其狀態的資訊,例如它開始工作的二進位日誌和中繼日誌座標、何時切換到另一個中繼日誌、何時在斷線後重新連線等等。
還有一個訊息優先順序為 SYSTEM
,不受詳細程度篩選的限制。關於非錯誤情況的系統訊息會列印到錯誤日誌,無論 log_error_verbosity
值為何。這些訊息包括啟動和關閉訊息,以及對設定的一些重大變更。
在 MySQL 錯誤日誌中,系統訊息會標示為 「System」。其他日誌接收器可能遵循也可能不遵循相同的慣例,並且在產生的日誌中,系統訊息可能會被指派為資訊優先等級所使用的標籤,例如 「Note」 或 「Information」。如果您根據訊息的標籤對日誌記錄套用任何額外的篩選或重新導向,系統訊息不會覆蓋您的篩選器,而是會像處理其他訊息一樣被處理。
log_error_suppression_list
系統變數適用於預定寫入錯誤日誌的事件,並指定當事件發生時優先級為 WARNING
或 INFORMATION
時要抑制哪些事件。例如,如果特定類型的警告被認為是錯誤日誌中不想要的 「雜訊」,因為它經常發生但並不重要,則可以將其抑制。log_error_suppression_list
不會抑制優先級為 ERROR
或 SYSTEM
的訊息。
log_error_suppression_list
的值可以是空字串(表示不抑制),或是一個或多個以逗號分隔的值的清單,表示要抑制的錯誤代碼。錯誤代碼可以用符號形式或數字形式指定。數字代碼可以使用或不使用 MY-
前綴指定。數字部分的前導零不重要。允許的代碼格式範例如下
ER_SERVER_SHUTDOWN_COMPLETE
MY-000031
000031
MY-31
31
為了可讀性和可移植性,符號值比數值更佳。
雖然要抑制的代碼可以用符號形式或數字形式表示,但每個代碼的數值必須在允許的範圍內
1 到 999:伺服器和客戶端使用的全域錯誤代碼。
10000 及更高:旨在寫入錯誤日誌(不發送給客戶端)的伺服器錯誤代碼。
此外,指定的每個錯誤代碼必須實際被 MySQL 使用。嘗試指定不在允許範圍內或在允許範圍內但未被 MySQL 使用的代碼會產生錯誤,並且 log_error_suppression_list
的值保持不變。
有關錯誤代碼範圍以及每個範圍內定義的錯誤符號和數字的資訊,請參閱 第 B.1 節,「錯誤訊息來源和元素」,以及 MySQL 8.4 錯誤訊息參考。
伺服器可以針對給定的錯誤代碼產生不同優先級的訊息,因此抑制與 log_error_suppression_list
中列出的錯誤代碼相關聯的訊息取決於其優先級。假設該變數的值為 'ER_PARSER_TRACE,MY-010001,10002'
。則 log_error_suppression_list
對於這些代碼的訊息具有以下影響
以
WARNING
或INFORMATION
優先級產生的訊息將被抑制。以
ERROR
或SYSTEM
優先級產生的訊息不會被抑制。
log_error_verbosity
的效果與 log_error_suppression_list
的效果結合。考慮一個使用以下設定啟動的伺服器
[mysqld]
log_error_verbosity=2 # error and warning messages only
log_error_suppression_list='ER_PARSER_TRACE,MY-010001,10002'
在這種情況下,log_error_verbosity
允許 ERROR
或 WARNING
優先級的訊息,並捨棄 INFORMATION
優先級的訊息。在未捨棄的訊息中,log_error_suppression_list
捨棄 WARNING
優先級和任何指定的錯誤代碼的訊息。
範例中顯示的 log_error_verbosity
值 2 也是其預設值,因此此變數對 INFORMATION
訊息的影響就像預設情況下所描述的那樣,而無需顯式設定。如果您希望 log_error_suppression_list
影響 INFORMATION
優先級的訊息,則必須將 log_error_verbosity
設定為 3。
考慮一個使用以下設定啟動的伺服器
[mysqld]
log_error_verbosity=1 # error messages only
在這種情況下,log_error_verbosity
允許 ERROR
優先級的訊息,並捨棄 WARNING
或 INFORMATION
優先級的訊息。設定 log_error_suppression_list
沒有任何影響,因為由於 log_error_verbosity
設定,它可能抑制的所有錯誤代碼都已被捨棄。