avto-dev/events-log-laravel

Laravel应用程序的事件日志

v3.5.0 2024-05-14 12:45 UTC

This package is auto-updated.

Last update: 2024-09-14 13:25:34 UTC


README

Laravel

Laravel的事件日志

Version PHP Version Build Status Coverage Downloads count License

此包提供了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

变更日志

Release date Commits since latest release

变更日志可以在此处找到

支持

Issues Issues

如果您在此包中发现任何错误,请在此存储库中创建问题

许可协议

这是一个开源软件,许可证为MIT License