首页 文章

Laravel松弛日志,但有其他字段和配置

提问于
浏览
0

在Laravel 5.6中我试图制作适当的松弛日志,我做了:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single', 'slack'],
    ],

    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'TEST',
        'icon' => ':boom:',
        'level' => 'info',
    ],

它工作但我想指定其他字段,如果它与其他条件匹配可能会稍微自定义 .

我正在查看SlackWebhookHandler.php monolog文件,但并非所有参数都在此配置中工作 . 例如,表情符号和用户名不起作用 - 我不知道slack是否已经有更改bot用户名的选项 . 另一个例子是在这个文件中它被称为useAttachment,这里它只是附件 - 存储名称的地方..?

回到主题我做了:

Log::info('added test',['test'=>'test']);

并且它可以工作,但是对于松弛我想在每个请求中发送附加字段,例如:

'added test',['test'=>'test', 'more' => 'test2']

我怎么能完成它?我需要以某种方式连接到Log Class和slack驱动程序,但我不知道如何做到这一点?

2 回答

  • 0

    我能够更接近解决方案但仍然根本没有:现在我在logging.php上了

    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'tap' => [App\Logging\SlackLogger::class],
        'username' => 'BOT',
        'attachment' => false,
        'emoji' => ':boom:',
        'level' => 'info',
    ],
    

    我创建了App / Logging / SlackLogger.php:

    namespace App\Logging;
    
    use Monolog\Logger;
    use Monolog\Handler\SlackWebhookHandler;
    use Monolog\Formatter\LineFormatter;
    use Monolog\Formatter\JsonFormatter;
    
    
    class SlackLogger
    {
        /**
         * Customize the given logger instance.
         *
         * @param  \Illuminate\Log\Logger  $logger
         * @return void
         */
        public function __invoke($logger)
        {
            $dateFormat = "Y-m-d H:i:s";
            $checkLocal = env('APP_ENV');
    
            foreach ($logger->getHandlers() as $handler) {
                if ($handler instanceof SlackWebhookHandler) {
                    $output = "[$checkLocal]: %datetime% > %level_name% - %message% `%context% %extra%` :poop: \n";
                    $formatter = new LineFormatter($output, $dateFormat);
    
                    $handler->setFormatter($formatter);
                    $handler->pushProcessor(function ($record) {
    
                        $record['extra']['dummy'] = 'test';
    
                        return $record;
                    });
                }
            }
        }
    
    }
    

    只有当我不尝试在松弛时制作自定义附件时它才有效..当我想要做的时候:

    $handler->pushProcessor(function ($record) {
    
      $record['extra']['dummy'] = 'test';
    
      $record['attachments'] = [
          'color' => "#36a64f",
          "title" => "Slack API Documentation",
          "text" => "Optional text that appears within the attachment"
      ];
    
      return $record;
    });
    

    $ record丢失了'attachments'数组..我在SlackWebhookHandler中在write函数中检查它,因为在这个pushProcessor返回它仍然存在,但没有发送到松弛 . 我知道这可能与 $handler->setFormatter($formatter); 有关,但如果我删除它,问题仍然存在 - 所以我仍然不知道如何解决它 .

  • 0

    我调试自己SlackRecord :: getSlackData,在那里你看到他如何处理附件并将其他数据添加到记录中 .

    对我来说它完全适合在slack通道的logging.php中设置 'context' => true 并定义一个处理器,只需添加我需要的数据到记录

    class SlackProcessor {
    
        /**
         * @param array $record
         * @return array
         */
        public function __invoke(array $record) {
            $record["context"]["Env"] = env("LOG_SLACK_USERNAME", "localhost");
            $record["context"]["Full URL"] = Request::fullUrl();
            $record["extra"]["Request Data"] = Request::all();
    
            return $record;
        }
    }
    

    所以也许你可以再次调试 getSlackData ,看看为什么他跳过你需要的附件部分 .

相关问题