文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  錯誤日誌輸出格式

7.4.2.9 錯誤日誌輸出格式

每個錯誤日誌接收器(寫入器)元件都有其特有的輸出格式,用來將訊息寫入其目的地,但其他因素可能會影響訊息的內容

  • 日誌接收器可用的資訊。如果日誌篩選元件在接收器元件執行之前執行,並移除日誌事件欄位,則該欄位將無法寫入。有關日誌篩選的資訊,請參閱第 7.4.2.4 節,「錯誤日誌篩選類型」

  • 與日誌接收器相關的資訊。並非每個接收器都會寫入錯誤事件中可用的所有欄位。

  • 系統變數可能會影響日誌接收器。請參閱影響錯誤日誌格式的系統變數

有關錯誤事件中欄位的名稱和描述,請參閱第 7.4.2.3 節,「錯誤事件欄位」。對於所有日誌接收器,錯誤日誌訊息中包含的執行緒 ID 是 mysqld 中負責寫入訊息的執行緒 ID。此 ID 指示伺服器的哪個部分產生了訊息,並與一般查詢日誌和慢查詢日誌訊息一致,其中包含連線執行緒 ID。

log_sink_internal 輸出格式

內部日誌接收器產生傳統的錯誤日誌輸出。例如

2020-08-06T14:25:02.835618Z 0 [Note] [MY-012487] [InnoDB] DDL log recovery : begin
2020-08-06T14:25:02.936146Z 0 [Warning] [MY-010068] [Server] CA certificate /var/mysql/sslinfo/cacert.pem is self signed.
2020-08-06T14:25:02.963127Z 0 [Note] [MY-010253] [Server] IPv6 is available.
2020-08-06T14:25:03.109022Z 5 [Note] [MY-010051] [Server] Event Scheduler: scheduler thread started with id 5

傳統格式的訊息具有下列欄位

time thread [label] [err_code] [subsystem] msg

[] 方括號字元是訊息格式中的常值字元。它們並不表示欄位是選用的。

label 值對應於 prio 錯誤事件優先權欄位的字串形式。

[err_code][subsystem] 欄位是在 MySQL 8.0 中新增的,因此在較舊伺服器產生的日誌中遺失。日誌剖析器可以將這些欄位視為訊息文字的一部分,它們僅存在於夠新以包含這些欄位的伺服器所寫入的日誌中。剖析器必須將 [err_code] 指示器中的 err_code 部分視為字串值,而不是數字,因為諸如 MY-012487MY-010051 之類的值包含非數字字元。

log_sink_json 輸出格式

JSON 格式的日誌接收器將訊息產生為包含鍵值對的 JSON 物件。例如

{
  "prio": 3,
  "err_code": 10051,
  "source_line": 561,
  "source_file": "event_scheduler.cc",
  "function": "run",
  "msg": "Event Scheduler: scheduler thread started with id 5",
  "time": "2020-08-06T14:25:03.109022Z",
  "ts": 1596724012005,
  "thread": 5,
  "err_symbol": "ER_SCHEDULER_STARTED",
  "SQL_state": "HY000",
  "subsystem": "Server",
  "buffered": 1596723903109022,
  "label": "Note"
}

顯示的訊息已重新格式化以提高可讀性。寫入錯誤日誌的事件每行顯示一則訊息。

ts(時間戳記)鍵是 JSON 格式日誌接收器獨有的。該值是一個整數,指示自 epoch ('1970-01-01 00:00:00' UTC) 以來的毫秒數。

tsbuffered 值是 Unix 時間戳記值,可以使用 FROM_UNIXTIME() 和適當的除數進行轉換

mysql> SET time_zone = '+00:00';
mysql> SELECT FROM_UNIXTIME(1596724012005/1000.0);
+-------------------------------------+
| FROM_UNIXTIME(1596724012005/1000.0) |
+-------------------------------------+
| 2020-08-06 14:26:52.0050            |
+-------------------------------------+
mysql> SELECT FROM_UNIXTIME(1596723903109022/1000000.0);
+-------------------------------------------+
| FROM_UNIXTIME(1596723903109022/1000000.0) |
+-------------------------------------------+
| 2020-08-06 14:25:03.1090                  |
+-------------------------------------------+
log_sink_syseventlog 輸出格式

系統日誌接收器產生的輸出符合本機平台上使用的系統日誌格式。

早期啟動記錄輸出格式

伺服器會在處理啟動選項之前,以及在知道諸如 log_error_verbositylog_timestamps 系統變數值之類的錯誤日誌設定,以及在知道要使用哪些日誌元件之前,產生一些錯誤日誌訊息。伺服器會以如下方式處理在啟動程序早期產生的錯誤日誌訊息

  • 伺服器會緩衝日誌事件(而不是格式化的日誌訊息),這使其能夠在設定已知之後,追溯地將組態設定套用至這些事件,從而使刷新後的訊息使用設定的設定,而不是預設值。此外,訊息會刷新至所有設定的接收器,而不僅僅是預設接收器。

    如果在得知日誌組態之前發生嚴重錯誤,且伺服器必須結束,伺服器會使用預設的日誌設定來格式化緩衝訊息,以避免遺失。如果沒有發生嚴重錯誤,但在處理啟動選項之前啟動速度過慢,伺服器會定期使用預設的日誌設定來格式化並刷新緩衝訊息,以避免看起來沒有回應。儘管此行為使用預設值,但在發生異常狀況時,這比遺失訊息要好。

影響錯誤日誌格式的系統變數

log_timestamps 系統變數控制寫入錯誤日誌(以及一般查詢日誌和慢查詢日誌檔案)的訊息中時間戳記的時區。伺服器會在錯誤事件到達任何日誌接收器之前套用 log_timestamps;因此會影響所有接收器的錯誤訊息輸出。

允許的 log_timestamps 值為 UTC(預設值)和 SYSTEM(本地系統時區)。時間戳記使用 ISO 8601 / RFC 3339 格式寫入:YYYY-MM-DDThh:mm:ss.uuuuuu 加上尾碼值 Z 表示祖魯時間 (UTC) 或 ±hh:mm(表示相對於 UTC 的本地系統時區調整的偏移量)。例如

2020-08-07T15:02:00.832521Z            (UTC)
2020-08-07T10:02:00.832521-05:00       (SYSTEM)