将 Monolog WebProcessor 与 Laravel 5.6 结合使用
Using Monolog WebProcessor with Laravel 5.6
我看到新的日志记录 stack/channels 提供了 tap
或定义 handlers
的方法。但是,我正在尝试加载 WebProcessor
,但它似乎不起作用。这应该被窃听吗?或者是否有不同的加载方式?
这是 Laravel 5.6 特有的。这是我在使用 Laravel 5.2 (bootstrap/app.php
) 的旧应用程序中使用的内容:
$app->configureMonologUsing(function (Monolog\Logger $monolog) {
/* Include basic http props in logs */
$webProcessor = new Monolog\Processor\WebProcessor();
$monolog->pushProcessor($webProcessor);
});
@AkenRoberts 我试过 tap => Monolog\Processor\WebProcessor::class
我猜是不对的。
好的。经过一些研究,似乎 tap
是挂钩 processors
的最佳方式。因此,如果我想将处理器标记为当前日志记录堆栈中的所有处理程序,我可以通过添加以下内容来做:
tap => [App\Logging\MyClass::class]
此 class 反过来会将所需的处理器推送到其 __invoke
方法中的所有处理程序。
namespace App\Logging;
use Illuminate\Log\Logger;
class MyClass {
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke(Logger $logger)
{
foreach ($logger->getHandlers() as $handler) {
$handler->pushProcessor(new WebProcessor);
}
}
}
我看到新的日志记录 stack/channels 提供了 tap
或定义 handlers
的方法。但是,我正在尝试加载 WebProcessor
,但它似乎不起作用。这应该被窃听吗?或者是否有不同的加载方式?
这是 Laravel 5.6 特有的。这是我在使用 Laravel 5.2 (bootstrap/app.php
) 的旧应用程序中使用的内容:
$app->configureMonologUsing(function (Monolog\Logger $monolog) {
/* Include basic http props in logs */
$webProcessor = new Monolog\Processor\WebProcessor();
$monolog->pushProcessor($webProcessor);
});
@AkenRoberts 我试过 tap => Monolog\Processor\WebProcessor::class
我猜是不对的。
好的。经过一些研究,似乎 tap
是挂钩 processors
的最佳方式。因此,如果我想将处理器标记为当前日志记录堆栈中的所有处理程序,我可以通过添加以下内容来做:
tap => [App\Logging\MyClass::class]
此 class 反过来会将所需的处理器推送到其 __invoke
方法中的所有处理程序。
namespace App\Logging;
use Illuminate\Log\Logger;
class MyClass {
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke(Logger $logger)
{
foreach ($logger->getHandlers() as $handler) {
$handler->pushProcessor(new WebProcessor);
}
}
}