【问题标题】:Laravel MonoLog, pushProcessor not Logging Addition attributesLaravel MonoLog,pushProcessor 不记录添加属性
【发布时间】:2020-07-04 14:43:10
【问题描述】:

我希望能够在我的日志记录中添加一个唯一 ID (Uid)。

示例 1: 中依赖于 config/logging.phpProcessorTap 以下文件未按预期工作。日志记录配置为使用stdout,它指的是ProcessorTap类,在创建日志语句时假设添加一个Uid(根据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  
});

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"}
});

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.7 monolog


    【解决方案1】:

    这可能是 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());
            });
        }
    }
    

    【讨论】:

    • 是的!将它添加到处理程序而不是一般记录器,就成功了!
    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多