iapotheca / log-processor
快递网络日志处理器
0.0.8
2022-09-12 17:57 UTC
Requires
- monolog/monolog: ^2.7
- php-amqplib/php-amqplib: ^3.1
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.5
README
这是一个用于准备发送到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: ['@'] )