W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
有時需要完全控制已存在通道的 Monolog:比如,你可能想要為給定通道的日志處理配置自定義的 Monolog FormatterInterface
實現。
先在通道配置中定義一個 tap
數組。 tap
數組包含一個在通道創(chuàng)建后有機會用于自定義 Monolog 實例的類列表:
'single' => [
'driver' => 'single',
'tap' => [App\Logging\CustomizeFormatter::class],
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
一旦在通道中有了 tap
選項配置,就要準備用于自定義 Monolog 實例的類。這種類這需要一個方法: __invoke
,它接受一個 Illuminate\Log\Logger
實例作為其參數。 Illuminate\Log\Logger
實例將所有方法調用代理到基礎的 Monolog 實例:
<?php
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class CustomizeFormatter
{
/**
* 自定義給定的日志實例
*
* @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%'
));
}
}
}
技巧:所有的 “tap” 類都是由 服務容器 解析的,因此任何依賴它們的構造器都會自動被注入。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: