avto-dev/ events-log-laravel
Laravel应用程序的事件日志
v3.5.0
2024-05-14 12:45 UTC
Requires
- php: ^8.1
- illuminate/config: ^10.0 || ^11.0
- illuminate/contracts: ^10.0 || ^11.0
- illuminate/events: ^10.0 || ^11.0
- illuminate/log: ^10.0 || ^11.0
- monolog/monolog: ^3.0
- psr/log: ^3.0
Requires (Dev)
- ext-json: *
- ext-sockets: *
- laravel/laravel: ^10.0 || ^11.0
- mockery/mockery: ^1.6.5
- phpstan/phpstan: ^1.10.66
- phpunit/phpunit: ^10.5
Suggests
- ext-sockets: For a sending data using TCP\UDP sockets
README
Laravel的事件日志
此包提供了Laravel事件(事件必须实现特定接口)的日志功能。
安装
使用以下命令使用Composer安装此包
$ composer require avto-dev/events-log-laravel "^3.0"
需要安装
composer
(如何安装composer)。
您需要修复包的主版本。
设置
安装包后,您需要对其进行配置。最小配置是在您的文件./config/logging.php
中添加以下值
<?php return [ // ... 'events_channel' => env('EVENTS_LOG_CHANNEL', 'stack'), // ... ];
其中stack
是文件中channels
部分列出的其中一个通道的名称。不指定此选项时,将使用默认通道进行日志记录。
您可以通过在
.env
文件中添加)来覆盖此选项。
例如,如果您需要将事件日志记录到单独的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' => AvtoDev\EventsLogLaravel\Logging\EventsLogstashLogger::class, 'path' => storage_path('logs/logstash/laravel-events.log'), 'level' => 'debug', ], ], ];
用于通过UDP协议发送Logstash
格式的日志
<?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' => AvtoDev\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' => AvtoDev\EventsLogLaravel\Logging\EventsUdpLogstashLogger::class, 'host' => env('LOGSTASH_UDP_HOST', 'logstash'), 'port' => (int) env('LOGSTASH_UDP_PORT', 4560), 'level' => 'debug', ], ], ];
有关日志配置的更多详细信息,请参阅此链接。
使用方法
此包按以下方式工作
- 该包的服务提供程序将其“监听器”注册到应用程序发生的所有事件上;
- 当接收到事件时,它会检查事件类实现
ShouldBeLoggedContract
接口; - 如果满足上述条件,则使用在文件
logging.php
中指定的日志记录通道记录返回的数据,这些数据由ShouldBeLoggedContract
接口中的方法描述。
可记录事件的示例类
<?php class SomeApplicationEvent implements \AvtoDev\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'; } /** * {@inheritdoc} */ public function skipLogging() : bool { return false; } }
现在,您只需要在应用程序的任何位置调用
event(new SomeApplicationEvent);
您可以确信该事件将被记录到日志文件中。有关Laravel中事件(events)的工作原理,您可以参阅此链接。
日志记录条件
在某些情况下,您可能需要添加事件日志记录的条件。为此,您可以在事件类中使用skipLogging
方法。
<?php class YourEvent extends AvtoDev\EventsLogLaravel\Events\AbstractLoggableEvent { /** * @var int */ protected $value = 101; /** * {@inheritDoc} */ public function logMessage(): string { return 'foo bar'; } /** * {@inheritDoc} */ public function skipLogging(): bool { return $this->value > 100; } // ... }
额外的日志记录器
除了此包之外,您还可以使用以下预配置的日志记录器AvtoDev\EventsLogLaravel\Logging\...
。
有关它们的更多详细信息,请参阅源代码。
测试
对于包的测试,我们使用phpunit
框架和docker-ce
+ docker-compose
作为开发环境。因此,在克隆存储库后,只需在终端中写入
$ make build $ make latest # or 'make lowest' $ make test
变更日志
变更日志可以在此处找到。
支持
如果您在此包中发现任何错误,请在此存储库中创建问题。
许可协议
这是一个开源软件,许可证为MIT License。