iapotheca/log-processor

快递网络日志处理器

0.0.8 2022-09-12 17:57 UTC

This package is auto-updated.

Last update: 2024-09-13 05:05:30 UTC


README

Tests

这是一个用于准备发送到RabbitMQ以供Logstash摄取以持久化日志消息中存在的元数据的Monolog日志处理器。

此包将日志消息中的数据解析为RabbitMQ普通字段。例如:以下消息将在转换后

消息:[KEY value] 我的信息在这里

数据:{key: "value", message: "[KEY value] 我的信息在这里"}

安装

步骤 1

安装依赖项和此包

composer require php-amqplib/php-amqplib iapotheca/log-processor

步骤 2

通过向您的 config/logging 添加以下内容将RabbitMQ驱动程序安装到您的Laravel实例中

// ...
use App\Logging\RabbitmqLogger;
//...
    'rabbitmq' => [
        'driver' => 'custom',
        'via' => RabbitmqLogger::class, // <-- this is your custom logger
        'exchange-name' => env('LOG_RABBITMQ_EXCHANGE_NAME', 'logs'),
        'host' => env('LOG_RABBITMQ_HOST', 'localhost'),
        'port' => env('LOG_RABBITMQ_PORT', 5672),
        'user' => env('LOG_RABBITMQ_USER', 'guest'),
        'password' => env('LOG_RABBITMQ_PASSWORD', 'password'),
        'log-name' => env('LOG_RABBITMQ_LOG_NAME', 'logstash'),
    ],
//...

步骤 3

实现您的 自定义Logger,在其中使用此 处理器

文件: app/Logging/RabbitmqLogger.php

<?php

namespace App\Logging;

use Iapotheca\LogProcessor\Processor;
use Monolog\Logger;
use PhpAmqpLib\Connection\AMQPSocketConnection;
use PhpAmqpLib\Channel\AMQPChannel;
use Monolog\Handler\AmqpHandler;

class RabbitmqLogger
{
    public function __invoke(array $config)
    {
        $connection = new AMQPSocketConnection(
            $config['host'],
            $config['port'],
            $config['user'],
            $config['password']
        );
        $channel = new AMQPChannel($connection);
        $logger = new Logger($config['log-name']);
        $handler = new AmqpHandler($channel, $config['exchange-name']);
        $handler->pushProcessor(new Processor(config('app.name'), [
            // these are the observed keys within the log message
            'KEY_ONE', 'KEY_TWO'
        ]));
        $logger->pushHandler($handler);
        return $logger;
    }
}

附加信息

字段中的特殊字符

Processor 类接受 4 个参数: $appName$keys$preProcessingCallback$extraSpecialCharacters。第 4 个参数用于任何可能需要接受的特殊字符。

以下示例将接受 @ 字符

new Processor(
    appName: 'my-app',
    keys: ['SOME_FIELD'],
    preProcessingCallback: null,
    extraSpecialCharacters: ['@']
)