之前有說過,在還沒有 AI 的時代,我開發都是這樣做的:
👉 先猜測我們要找的功能可能會在哪個模組?
👉 然後在程式裡加 log,一個一個慢慢 trace 下去。
現在年代已經不一樣了,我們可以請 AI 幫我們快速定位程式位置。
不過,加 log 依然是 Magento 開發最基本、最實用的除錯方式。
今天就帶大家看看:Magento 的 log 要怎麼看?要怎麼加?
因為我們的 Magento 是用 docker-compose 架設的,所以第一步要先進容器。
假設服務名稱是 php
,就可以輸入:
docker compose exec php bash
這樣我們就能進入容器內,開始操作。
Magento 的 log 檔案會放在專案的 magento2/var/log/
資料夾底下。
常見的兩個檔案:
system.log
→ 一般開發時的 logexception.log
→ 錯誤或例外這邊推薦大家用這個指令來查看:
cd magento2
tail -f var/log/system.log
👉 好處是可以 即時看到 log 的輸出,不用一直重新打開檔案,非常方便。
最方便的方式就是:
\Magento\Framework\App\ObjectManager::getInstance()
->get('Psr\Log\LoggerInterface')
->info('你要 log 的東西');
這樣一跑,訊息就會出現在 system.log
裡。
⚠️ 正式開發時建議用 DI 注入 LoggerInterface,
但在除錯階段,這個「偷吃步」方式超好用。
假設我們現在想找「進入首頁」的程式邏輯在哪。
通常我會這樣做:
Magento_Cms
)。Index
有關的 Controller。execute()
方法裡,加上我們的 log。像這樣:
$this->logger->info('進入首頁啦!');
接著回到前台首頁,刷新一下,就會在 system.log
裡看到:
[YYYY-MM-DD HH:MM:SS] main.INFO: 進入首頁啦!
有時候就算檔案看起來很對,卻不會印出 log。
這可能是因為:
所以光靠 log 一層一層 trace,真的會花掉很多時間。
但現在有了 AI,可以幫我們快速定位「哪裡才是實際執行的程式碼」。
Log 檔案位置 | 用途 | 什麼時候會用到 |
---|---|---|
var/log/system.log |
一般資訊 / 除錯訊息 | 開發時常用 $this->logger->info() 、debug() |
var/log/exception.log |
錯誤與例外訊息 | 程式丟出 Exception、無法捕捉的錯誤 |
var/report/ |
錯誤報告(每個報告會有一個編號檔案) | 當頁面出現「There has been an error processing your request」 |
var/log/debug.log (需啟用) |
偵錯級別 log | 在 app/etc/env.php 開啟 debug 模式後,更多細節會寫這裡 |
var/log/custom.log (自訂) |
自己定義的 log | 可以用 Monolog 或 Zend\Log 建立屬於自己的 log |
今天我們學會了:
加 log 是 Magento 開發中最基本的 Debug 技巧,雖然現在 AI 能幫我們加速,但 log 永遠是開發者手上最可靠的工具之一。