WordPress 除錯 – 如何關閉 Debug.log 裡的 Notice 錯誤?


作者: | 2020/11/12 | 留言


Debug.log 很方便,但容易噴爆

身為 WP 開發者,定義在 wp-config.php 裡的除錯參數三兄弟相信大家都已經見過:

define('WP_DEBUG', true); // 打開除錯模式,讓錯誤可以噴出來
define('WP_DEBUG_LOG', true); // 讓錯誤噴到這裡: wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // 不要讓錯誤噴得螢幕滿臉都是...

把錯誤集中在 debug.log 在開發時是非常方便的,雖說 WP_DEBUG 通常不會在正式環境打開,但最近就遇到手邊一個大站默默被打開,且剛好有不少第三方外掛的程式碼寫作比較隨興 (?),夾雜著許多 Notice 的 log 資料很快的就把 debug.log 灌到 30 幾G,也影響到真正想要觀察的 error log 資料。

控制 Debug.log 輸出的錯誤層級

我目前的需求是這樣:我只想控制主機下某一個特定網站的噴錯,不想修改 php.ini 的設定,而且我習慣看 wp-content/debug.log,希望控制它的內容就好。

這個問題如果要 Google 找解法,會有幾種文章:

  1. 快快樂樂認識 WP_DEBUG 和它的好夥伴們,然後就沒了…
  2. 叫你到 wp-config.php 設定 error_reporting(E_ALL & ~E_NOTICE)…
  3. 去改 php.ini 到 .htaccess 設定 display_errors 再設 error_reporting…

以上這些都不是正解,很多教學請你在 wp-config.php 早早置入的設定,在後續執行的路上就會被蓋掉,然後 debug.log 還是照樣全噴。

我們必須在關鍵的執行時間點去設定 error_reporting() 才有效果,而這個時間點就是 mu-plugin (我也是真沒想到)。

Mu Plugin 的解法

總之就是建立一個自訂的 mu-plugin (Must use plugin),名字可以自取,這裡我們先叫 debug_log_setting.php,那就會需要手動到這邊建立: wp-content/mu-plugins/debug_log_setting.php (如果你是第一次使用 mu-plugin 會需要手動建立 mu-plugins 目錄)。

<?php
// debug_log_setting.php 裡只要放這行
error_reporting(E_ALL &  ~( E_USER_NOTICE | E_NOTICE ));

以上述設定來說,我想關閉的錯誤類型主要就是 Notice 啦:

  • E_USER_NOTICE:用 trigger_error 自產的提醒通知。
  • E_NOTICE:執行時期的提醒通知。常常是一些變數使用時未先指派內容的小問題,通常不影響網站運行。

因為 mu-plugin 自建立完成時就會自動啟用,所以你現在可以試試看讓 debug.log 噴點東西了,(暫時) 沒有 Notice 的干擾,就可以很方便的安排優先序來解 bug 了。


標籤:,

分類:

本文作者是Audi Lu

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

*

*

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料