feugene / events-log-laravel
Laravel 应用的事件日志记录
v3.0.0
2022-07-14 11:56 UTC
Requires
- php: >=8.0
- illuminate/config: ^8.75 || ^9.0
- illuminate/contracts: ^8.75 || ^9.0
- illuminate/events: ^8.75 || ^9.0
- illuminate/log: ^8.75 || ^9.0
- monolog/monolog: ^2.7
- psr/log: ^2.0
Requires (Dev)
- ext-json: *
- ext-sockets: *
- efureev/support: ^4.12.0
- mockery/mockery: ^1.5
- orchestra/testbench: ^6.24
- phpstan/phpstan: ^1.8.1
- phpunit/phpunit: ^9.5
Suggests
- ext-sockets: For a sending data using TCP\UDP sockets
README
Laravel 的事件日志记录
此包提供 Laravel 事件的日志记录(事件必须实现特殊接口)。
要求
- PHP >=8.0
- Laravel >= 8.75
安装
使用以下命令使用 composer 安装此包
$ composer require feugene/events-log-laravel "^3.0"
需要安装
composer
(如何安装 composer)。
您需要修复包的主版本。
设置
安装后,您应该设置它。最小配置如下,更改您的 ./config/logging.php
文件
<?php return [ // ... 'events_channel' => env('EVENTS_LOG_CHANNEL', 'stack'), // ... ];
其中 stack
是通道名称,列在该文件的 channels
部分。如果不指定此选项,则使用默认通道进行日志记录。
您可以通过在
.env
文件中添加以下行来覆盖此选项:EVENTS_LOG_CHANNEL=%channel_name%
。
例如,如果您需要在不同的文件中以 Monolog
格式记录事件,并记录到 另一个文件 中以 Logstash
格式,则配置可能如下所示
<?php return [ 'events_channel' => env('EVENTS_LOG_CHANNEL', 'events-stack'), // ... 'channels' => [ // ... 'events-stack' => [ 'driver' => 'stack', 'channels' => ['events-monolog', 'events-logstash'], ], 'events-monolog' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel-events.log'), 'level' => 'debug', ], 'events-logstash' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\EventsLogstashLogger::class, 'path' => storage_path('logs/logstash/laravel-events.log'), 'level' => 'debug', ], ], ];
将日志以 Logstash
格式通过 UPD 发送
<?php return [ 'default' => env('LOG_CHANNEL', 'app-logstash-udp'), 'events_channel' => env('EVENTS_LOG_CHANNEL', 'events-logstash-udp'), // ... 'channels' => [ // ... 'app-logstash-udp' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\DefaultUdpLogstashLogger::class, 'host' => env('LOGSTASH_UDP_HOST', 'logstash'), 'port' => (int) env('LOGSTASH_UDP_PORT', 4560), 'level' => 'debug', ], 'events-logstash-udp' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\EventsUdpLogstashLogger::class, 'host' => env('LOGSTASH_UDP_HOST', 'logstash'), 'port' => (int) env('LOGSTASH_UDP_PORT', 4560), 'level' => 'debug', ], ], ];
您可以在 这里 了解更多关于 Laravel 日志记录的信息。
使用方法
此包按以下方式工作
- 此包的服务提供程序注册了其监听器,以监听应用程序中发生的所有事件;
- 当收到事件时,它会检查事件类的实现是否符合
ShouldBeLoggedContract
接口; - 如果您的事件类实现了
ShouldBeLoggedContract
接口,则使用在文件logging.php
中指定的日志通道进行写入数据;
已记录的事件类示例
<?php class SomeApplicationEvent implements \Feugene\EventsLogLaravel\Contracts\ShouldBeLoggedContract { /** * {@inheritdoc} */ public function logLevel(): string { return 'info'; } /** * {@inheritdoc} */ public function logMessage(): string { return 'My log message'; } /** * {@inheritdoc} */ public function logEventExtraData(): array { return ['key' => 'any value']; } /** * {@inheritdoc} */ public function eventType(): string { return 'default_event'; } /** * {@inheritdoc} */ public function eventSource(): string { return 'service_name'; } public function eventTags(): array { return []; } }
现在,您只需在任何地方调用应用程序中的此方法即可
event(new SomeApplicationEvent());
并确保此事件将被记录在日志文件中。
日志条件
在某些情况下,需要在事件中添加日志条件。为此,您可以在事件类中使用 skipLogging
方法;
<?php class YourEvent implements \Feugene\EventsLogLaravel\Contracts\ShouldBeLoggedContract { /** * @var int */ protected $value = 101; /** * {@inheritDoc} */ public function logMessage(): string { return 'foo bar'; } /** * {@inheritDoc} */ public function skipLogging(): bool { return $this->value > 100; } // ... }
额外的日志记录器
除本包外,您还可以使用以下预配置的日志记录器: Feugene\EventsLogLaravel\Logging\...
测试
我们使用 phpunit
框架和 docker-ce
+ docker-compose
作为开发环境进行包测试。因此,在克隆存储库后,只需在您的终端中编写以下内容
$ make build $ make latest # or 'make lowest' $ make test
变更日志
变更日志可以在 此处找到。
支持
如果您发现任何包错误,请在此存储库中 创建一个问题。
许可
这是一个开源软件,受 MIT 许可 许可。