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 找解法,會有幾種文章:
- 快快樂樂認識 WP_DEBUG 和它的好夥伴們,然後就沒了…
- 叫你到 wp-config.php 設定 error_reporting(E_ALL & ~E_NOTICE)…
- 去改 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 了。
標籤:debug, WordPress開發
分類:WordPress
本文作者是Audi Lu