Laravel MonoLog, pushProcessor not Logging Addition attribut



我希望能够为我的日志记录添加一个唯一的id(Uid)。

示例 1 中:依赖于config/logging.php,下面的ProcessorTap文件无法按预期工作。日志记录配置为使用stdout,该 引用假定在创建 log 语句时添加 Uid 的ProcessorTap类(根据UidProcessor)

示例 2:使用纯 Mono 类按预期工作。

为什么示例 1 不将Uid添加到日志中,而 laravel("laravel/framework": "5.7.*")也应该使用 Monolog 类?

示例 1:调用此 API 时,Log::info('test')的输出不包括 UiD

Route::get('/test', function () {
Log::info('test'); //output = [2020-03-24 04:51:16] local.INFO: test  
});

配置/日志记录.php:

'default' => env('LOG_CHANNEL', 'stdout'),   //.env LOG_CHANNEL=stdout    
'stdout' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stdout',
],
'tap' => [
ProcessorTap::class,
],
]      

处理器分路器:

use MonologProcessorUidProcessor;
class ProcessorTap
{
/**
* Customize the given logger instance.
*
* @param  IlluminateLogLogger  $logger
* @return void
*/
public function __invoke($logger)
{
$logger->pushProcessor(new UidProcessor());
}
}

示例 2:Uid 正常工作 (a484a6729e14996c0af1) 添加到日志中以供$logger->info('test')

use MonologLogger;
use MonologProcessorUidProcessor;
Route::get('/test', function () {
$logger = new Logger('main');
$logger->pushProcessor(new UidProcessor(20)); 
$logger->info('test'); // output = [2020-03-24 04:57:26] main.INFO: test [] {"uid":"a484a6729e14996c0af1"}
});

这可能是一个 laravel (5.7)/mono 版本特定的问题,但我能够通过处理程序迭代并调用 pushProcessor 来解决

use MonologProcessorUidProcessor;
class ProcessorTap
{
/**
* Customize the given logger instance.
*
* @param  IlluminateLogLogger  $logger
* @return void
*/
public function __invoke($logger)
{
collect($logger->getHandlers())->each(function ($handler) {
$handler->pushProcessor(new UidProcessor());
});
}
}

最新更新