在Laravel框架中,我们可以通过配置config/logging.php
文件来自定义错误日志的通道(channels)。以下是一个自定义错误通道的示例:
// 在config/logging.php中
return [
// ...
'channels' => [
// ...
'custom-error' => [
'driver' => 'monolog',
'level' => 'error',
'path' => storage_path('logs/custom-error.log'),
'tap' => [App\Logging\CustomErrorChannel::class],
],
],
];
然后,创建对应的类文件App\Logging\CustomErrorChannel.php
:
<?php
namespace App\Logging;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Processor\WebProcessor;
use Monolog\Handler\RotatingFileHandler;
class CustomErrorChannel
{
public function __invoke($logger)
{
$config = config('logging.channels.custom-error');
// 创建日志通道
$handler = (new RotatingFileHandler(
$config['path'],
$config['level'],
30, // 文件最多30天
$config['permissions'] ?? null,
$config['locking'] ?? false
))->setFormatter($logger->popHandler()->getFormatter());
$logger->pushHandler($handler);
return $logger;
}
}
在这个示例中,我们定义了一个自定义错误通道custom-error
,它会记录错误级别以上的日志到storage/logs/custom-error.log
文件,并且使用RotatingFileHandler
来管理日志文件的滚动。这个通道可以在应用程序中通过Log
门面或依赖注入的方式使用。