首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel MonoLog,pushProcessor不增加日志记录属性

Laravel MonoLog,pushProcessor不增加日志记录属性
EN

Stack Overflow用户
提问于 2020-03-24 05:20:49
回答 1查看 1.1K关注 0票数 1

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

示例1中,依赖于下面的config/logging.phpProcessorTap文件的不像预期的那样工作。日志记录被配置为使用stdout,当创建日志语句时(根据UidProcessor),该类引用了应该添加Uid的ProcessorTap类。

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

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

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

代码语言:javascript
运行
复制
Route::get('/test', function () {
   Log::info('test'); //output = [2020-03-24 04:51:16] local.INFO: test  
});

config/logging.php:

代码语言:javascript
运行
复制
   'default' => env('LOG_CHANNEL', 'stdout'),   //.env LOG_CHANNEL=stdout    
    'stdout' => [
                 'driver' => 'monolog',
                 'handler' => StreamHandler::class,
                 'with' => [
                     'stream' => 'php://stdout',
                 ],
                'tap' => [
                   ProcessorTap::class,
                ],
             ]      

ProcessorTap:

代码语言:javascript
运行
复制
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')日志中

代码语言:javascript
运行
复制
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"}
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-24 13:21:53

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

代码语言:javascript
运行
复制
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());
        });
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60825369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档