我希望能够为我的日志添加一个唯一的id (Uid)。
在示例1中,依赖于下面的config/logging.php
和ProcessorTap
文件的不像预期的那样工作。日志记录被配置为使用stdout
,当创建日志语句时(根据UidProcessor
),该类引用了应该添加Uid的ProcessorTap
类。
示例2:使用纯Mono类的按预期工作。
当laravel Uid
("laravel/framework": "5.7.*")
也应该使用Monolog类时,1为什么不将添加到日志中呢?
示例1:当调用此api时,Log::info('test')
的输出不包括UiD
Route::get('/test', function () {
Log::info('test'); //output = [2020-03-24 04:51:16] local.INFO: test
});
config/logging.php:
'default' => env('LOG_CHANNEL', 'stdout'), //.env LOG_CHANNEL=stdout
'stdout' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stdout',
],
'tap' => [
ProcessorTap::class,
],
]
ProcessorTap:
use Monolog\Processor\UidProcessor;
class ProcessorTap
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
$logger->pushProcessor(new UidProcessor());
}
}
示例2:正确工作Uid (a484a6729e14996c0af1)被添加到$logger->info('test')
日志中
use Monolog\Logger;
use Monolog\Processor\UidProcessor;
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"}
});
发布于 2020-03-24 13:21:53
这可能是一个特定于laravel (5.7)/mono版本的问题,但我能够通过处理程序和调用pushProcessor来解决via迭代
use Monolog\Processor\UidProcessor;
class ProcessorTap
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
collect($logger->getHandlers())->each(function ($handler) {
$handler->pushProcessor(new UidProcessor());
});
}
}
https://stackoverflow.com/questions/60825369
复制相似问题