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 | ERROR |
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 9.0 錯誤訊息參考。
伺服器可能會針對給定的錯誤代碼產生不同優先順序的訊息,因此是否抑制與 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
的設定,它可能抑制的所有錯誤代碼都已被捨棄。