feugene/events-log-laravel

Laravel 应用的事件日志记录

v3.0.0 2022-07-14 11:56 UTC

This package is auto-updated.

Last update: 2024-09-14 18:04:26 UTC


README

Laravel

Laravel 的事件日志记录

PHP Version Build Status Coverage Downloads count License

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

变更日志

Release date Commits since latest release

变更日志可以在 此处找到

支持

Issues Issues

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

许可

这是一个开源软件,受 MIT 许可 许可。