寫程式常常需要除錯,
除錯很常用的方法是透過寫Log,
在適當的地方寫Log,
往往能夠幫助我們找出錯誤,
進而修改錯誤.
Laravel本身當然也有提供Log來使用.
Laravel的日誌(Log)
Laravel使用 Monolog 庫為各種強大的日誌處理常式提供支援,
Laravel配置了多種日誌處理常式,
方便在一個或多個日誌檔或將錯誤資訊寫入系統日誌之間進行選擇.
Laravel的日誌檔的存儲目錄為storage/logs
使用Laravel的日誌要引用
use Illuminate\Support\Facades\Log;
Laravel的Log記錄器提供 RFC 5424 中定義的八種日誌級別:emergency、alert、critical、error、warning、notice、info 和 debug.
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Laravel的錯誤訊息設定
config/app.php設定檔的debug選項決定了是否向使用者顯示錯誤資訊,
預設情況下,
可以在.env檔中設定這個變數的值.
APP_DEBUG=true
對於我們在測試開發的時候,
APP_DEBUG應該要設置為true.
而在正式上線的時候,
應該要設定為false.
如果在正式上線設定為true,
有可能會將敏感的資訊暴露給使用者.
Laravel的日誌(Log)儲存
Laravel支援stack、single、daily、syslog和errorlog等多種日誌寫入模式,
新版的Laravel有更多種模式,
透過修改config/logging.php設定檔中的log選項來配置Laravel使用的存儲機制.
在.env中有個LOG_CHANNEL可以設定,
新版的Laravel預設是stack.
.env檔案
LOG_CHANNEL=stack
預設是把所有的Log都寫在同一個檔案中,
不過大部分會希望每天用不同的Log檔案,
才不會檔案太大、資料太多.
改成設定如下
LOG_CHANNEL=daily
我們看daily在config/logging.php裡面的預設設定值,
有需要的時候我們可以修改這些設定值.
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
最大日誌檔數
在使用daily日誌模式時,
Laravel預設保留14天份的日誌檔,
如果要調整保留檔的數量,
就在config/logging.php設定檔中修改days參數:
'days' => 30
日誌嚴重程度級別
使用Monolog時,
日誌消息可能具有不同程度的嚴重級別.
預設情況下,
Laravel 將存儲所有級別的日誌.
你也可以在生產環境中通過將level選項加到config/logging.php設定檔中來設定要記錄的嚴重程度最低的日誌級別.
設定之後,
Laravel就只會記錄大於或等於指定嚴重級別的所有級別的錯誤.
例如,預設的level被設置為warning,
那麼Laravel只會記錄warning、error、critical、alert和emergency級別的日誌資訊:
'level' => 'error',
Monolog的嚴重程度的級別,
從低到高為:debug、info、notice、warning、error、critical、alert、emergency.
實作記錄Log
我們將app/Http/Controllers/UserAuthController.php的signUpProcess修改如下
//處理註冊資料
public function signUpProcess()
{
//接收輸入資料
$input = request()->all();
//驗證規則
$rules = [
//暱稱
'name' => [
'required',
'max:50',
],
//帳號(E-mail)
'account' => [
'required',
'max:50',
'email',
],
//密碼
'password' => [
'required',
'min:5',
],
//密碼驗證
'password_confirm' => [
'required',
'same:password',
'min:5'
],
];
//驗證資料
$validator = Validator::make($input, $rules);
if($validator->fails())
{
//資料驗證錯誤
return redirect('/user/auth/sign-up')
->withErrors($validator)
->withInput();
}
$input['password'] = Hash::make($input['password']);
//Log::notice(print_r($input, true));
//啟用紀錄SQL語法
DB::enableQueryLog();
//新增使用者資料
User::create($input);
//取得目前使用過的SQL語法
Log::notice(print_r(DB::getQueryLog(), true));
var_dump($input);
exit;
}
注意以下這一行
Log::notice(print_r($input, true));
當然檔案前面要
use Illuminate\Support\Facades\Log;
執行表單之後,
我們到storage\logs目錄下會看到新增了檔案
打開來看會看到我們剛才存進去的資料
參考資料:
Laravel 的錯誤和日誌記錄