Laravel Tap Formatter:我实际在哪里格式化消息?

问题描述 投票:0回答:1

在我的laravel应用程序中,需要将需要发送的消息格式化为松弛状态。因此,我将一个松弛日志通道设置为config/logging.php

'slack'         => [
    'driver'   => 'slack',
    'url'      => /*Censored Hook URL*/,
    'username' => 'MyApp',
    'emoji'    => ':gear:',
    'level'    => 'debug',
],

也可以在documentation上看到,我可以做一个monolog格式化程序,因此我做了以下工作:

namespace App\Logging;

class SlackLogFormatter
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter(...);
        }
    }
}

并且将其指定为点击进入我的日志:

'slack'         => [
    'driver'   => 'slack',
    'tap' => [App\Logging\SlackLogFormatter::class]
    'url'      => /*Censored Hook URL*/,
    'username' => 'MyApp',
    'emoji'    => ':gear:',
    'level'    => 'debug',
],

但是在我的格式化程序中,我在哪里处理日志条目本身?我的意思是:

  1. $handler->setFormatter似乎不是\Illuminate\Log\Logger类的方法。

  2. 我无法找出需要提供自定义格式的方法。我的意思是我有invoke方法,那之后呢?

php logging laravel-5.6 formatter
1个回答
0
投票

松弛的格式化程序应为以下内容:

namespace App\Logging;

use Monolog\Formatter\LineFormatter;

class SlackLogFormatter
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            if ($handler instanceof SlackWebhookHandler) {
                $format=""; // Look on the Monolog's Line formatter documentation
                $formatter= new LineFormatter($format,"Y-m-d H:i:s");


                $handler->pushProcessor(function ($record) {
                   //Append extra info of formatting here
                });

                $handler->setFormatter($formatter);
            }
        }
    }
}

并且配置松弛部分以使格式化程序不发送附件必需的内容:

'slack'         => [
    'driver'   => 'slack',
    'tap' => [App\Logging\SlackLogFormatter::class]
    'url'      => /*Censored Hook URL*/,
    'username' => 'MyApp',
    'emoji'    => ':gear:',
    'level'    => 'debug',
    'attachment' => FALSE,
],

setFormatter方法采用了新的Monolog Formatter,如https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#formatters

pushProcessor允许您在消息中填充其他字段,例如。在您的日志消息上显示表情符号:

    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            if ($handler instanceof SlackWebhookHandler) {
                $format="%emoji% %message%"; 
                $formatter= new LineFormatter($format,"Y-m-d H:i:s");

                $handler->pushProcessor(function ($record) {
                         $record['emoji']=":poop:";
                });

                $handler->setFormatter($formatter);
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.