salayx / rabbitmq-logger
将错误和异常记录到rabbitmq交换机。
Requires
- php: >=5.4.0
- kdyby/rabbitmq: ^1.1
Suggests
- Kdyby/Console: Allows use console commands to consume messages
- Kdyby/Doctrine: Allows save messages into database
- ublaboo/datagrid: Needed for datagrid component
This package is not auto-updated.
Last update: 2024-09-29 03:25:54 UTC
README
将错误和异常记录到rabbitmq交换机。
Rabbitmq Logger 为 Nette 框架 提供了两个扩展。
- RabbitMqLoggerExtension 用于将错误/异常记录到 rabbitmq 交换机。如果您希望在 rabbitmq 中记录错误消息,则应在所有项目中使用此扩展。
- ConsumerExtension 用于从队列获取消息,并可选地使用 doctrine 2 将其保存到数据库。它还提供网格来显示已保存的消息。您应与内部应用程序一起使用此扩展来管理已保存的消息。
安装
要求
salayx/rabbitmq-logger 需要 PHP 5.4 或更高版本。
建议
如果您想使用 ConsumerExtension 将日志保存到数据库
如果您想使用 ConsumerExtension 提供网格以显示已保存的消息
安装
安装 salayx/rabbitmq-logger 的最佳方式是使用 Composer
composer require sallyx/rabbitmq-logger composer require kdyby/console composer require kdyby/doctrine composer require ublaboo/datagrid
配置
首先,您需要配置 Kdyby/RabbitMq。至少是连接
extensions: rabbitmq: Kdyby\RabbitMq\DI\RabbitMqExtension rabbitmq: connection: host: localhost port: 5672 user: 'guest' password: 'guest' #vhost: '/'
如果您想使用 RabbitMqLoggerExtension 记录错误消息,请按如下方式添加和配置它
extensions: rabbitmqLoggerExt: Sallyx\RabbitMqLogger\DI\RabbitMqLoggerExtension
这是 RabbitMqLoggerExtension 的默认配置
rabbitmqLoggerExt: rabbitmqEnabled: true rabbitmqExtensionName: rabbitmq guid: rabbitmq-logger # global id of your site (use whatever you want) producer: connection: default # Kdyby/RabbitMq default connection exchange: name: nette-log-exchange type: fanout
如果您使用 direct 交换机,路由键的格式为 priority,其中 priority 是 error 或 exception。如果您使用 topic 交换机,路由键的格式为 priority。guid
如果您想使用 ConsumerExtension,您必须添加 Kdyby/Console 和/或 Kdyby/Doctrine 扩展,并配置它(请参阅该扩展的文档)
extensions: rabbitmqLoggerConsumer: Sallyx\RabbitMqLogger\DI\ConsumerExtension # must be first! console: Kdyby\Console\DI\ConsoleExtension events: Kdyby\Events\DI\EventsExtension annotations: Kdyby\Annotations\DI\AnnotationsExtension doctrine: Kdyby\Doctrine\DI\OrmExtension rabbitmqLoggerExt: Sallyx\RabbitMqLogger\DI\RabbitMqLoggerExtension # if you want to use it either console: url: https:///~petr/example-url/ doctrine: host: 127.0.0.1 user: petr password: xxx dbname: databasename driver: pdo_pgsql # pdo_mysql
这是 ConsumerExtension 的默认配置
rabbitmqLoggerConsumer: consumerName: rabbitLogger consumer: connection: default # Kdyby/RabbitMq default connection queue: name: nette-log-queue exchange: name: nette-log-exchange # the same as for RabbitMqLoggerExtension type: fanout # the same as for RabbitMqLoggerExtension manager: Sallyx\RabbitMqLogger\Model\Doctrine\Manager
如果您想轻松访问您的已记录异常,您可以将此添加到 RabbitMqLoggerExtension 配置中
rabbitmqLoggerExt: exceptionFileRoute: route: get-tracy-exception-file secret: xxx ....
这将在您的 Web 应用程序中创建一个路由,提供对以 http://example.org/get-tracy-exception-file?secret=xxx&file=name_of_the_file 形式保存的错误消息的访问
要在网格中使用此功能,请将此添加到 ConsumerExtension 配置中
rabbitmqLoggerConsumer: exceptionFileRoute: route: get-tracy-exception-file secret: xxx ....
设置
您必须为 RabbitMqLoggerExtension 创建交换机,为 ConsumerExtension 创建队列。如果要将消息保存到数据库,您还必须创建模式和表。
如果您已安装 Kdyby/Console,您可以使用 Kdyby/RabbitMq 扩展中的 rabbitmq:setup-fabric 命令来设置交换机和队列
php www/index.php rabbitmq:setup-fabric
要创建数据库表,您可以使用适用于 Postgresql 的 structure-psql.sql 和适用于 Mysql/MariaDB 的 structure-mysql.sql
使用 RabbitMqLoggerExtension
不需要进一步的操作。您的项目应将消息记录到 rabbitmq 交换机,如配置所示。
使用 ConsumerExtension
使用控制台
如果您已安装 Kdyby/Console 扩展,您可以使用以下命令
- rabbitmqLoggerConsumer:queue 添加或从交换机中删除其他队列。
- rabbitmqLoggerConsumer:list 列出并从队列中删除消息。
- rabbitmqLoggerConsumer:save 列出、将消息保存到数据库并从队列中删除(需要 Kdyby/Doctine 扩展)。
当rabbitmqLoggerConsumer:save从配置中描述的队列中获取消息时,rabbitmqLoggerConsumer:list需要队列名称作为参数,以避免意外地从队列中删除消息。您可以使用rabbitmqLoggerConsumer:queue来创建新队列。
php www/index.php rabbitmqLoggerConsumer:queue spy-whats-going-on exception # create queue for 'exception' routing key php www/index.php rabbitmqLoggerConsumer:list spy-whats-going-on # print message and remove it from queue .... php www/index.php rabbitmqLoggerConsumer:queue spy-whats-going-on -d # delete queue
使用网格
在演示者中
use Sallyx\RabbitMqLogger\Controls\Doctrine\GridFactory; ... public function __construct(GridFactory $factory) { $this->gridFactory = $factory; } public function createComponentGrid($name) { return $this->gridFactory->create(); }
在latte中
{control grid}
您需要添加资产,具体操作请参阅https://ublaboo.org/datagrid/页面上的说明。
结果