Laravel8學習筆記-日誌元件

IT小馬發表於2021-10-26

配置

配置檔案 config/logging.php

預設情況下,Laravel 使用 stack 通道來記錄日誌資訊,stack 通道被用於聚合多個日誌通道到單個通道。

例:single通道預設寫入larave.log檔案,daily通道預設寫入larave-*.log檔案,若配置stack如下

'stack' => [
  'driver' => 'stack',
  'channels' => ['single','daily'],
]

則日誌會同時寫入larave.log和larave-*.log檔案

日誌級別

LOG_LEVEL=debug 日誌資訊被通道記錄所必須達到的最低「級別」

emergencyalertcriticalerrorwarningnoticeinfodebug

假設LOG_LEVEL=error,則Log::debug('An informational message.');不會記錄日誌

寫入日誌資訊

Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

寫入上下文資訊

Log::info('User failed to login.', ['id' => 123]);

//local.INFO: User failed to login. {"id":123} 

寫入指定通道

'test' => [
  'driver' => 'single',
  'path' => storage_path('logs/laravel.log'),
],

Log::channel('test')->info('Something happened!');

通道自定義

'single' => [
    'driver' => 'single',
    'tap' => [App\Logging\CustomizeFormatter::class],
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
],
注:所有「tap」類都通過服務容器解析,所以他們需要的所有建構函式依賴都會被自動注入。
<?php

namespace App\Logging;

use Monolog\Formatter\LineFormatter;

class CustomizeFormatter
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter(new LineFormatter(
                '[%datetime%] %channel%.%level_name%: %message% %context% %extra%'
            ));
        }
    }
}

相關文章