mrmmg/laravel_loggify

一个 Laravel 扩展包,提供了一种简单高效的方式使用 Redis 存储日志消息。

v1.0.1 2024-03-26 05:18 UTC

This package is auto-updated.

Last update: 2024-09-26 06:22:12 UTC


README

使用标签和增强选项管理 Laravel 日志。

含义

基于 ChatGPT 的回复:"Loggify" 不是英语中的标准词汇,也没有明确的定义。您可以将它定义为:在数字或数据驱动的环境中,简化或增强创建和管理日志或记录的过程。这可能涉及自动化日志生成、改进日志组织或使日志更易于分析和监控。

这个包的作用是什么?

此包帮助 Laravel 开发者将应用程序日志存储在 Redis 数据库中(目前支持),并提供一个方便的系统来使用标签对日志进行分类。这使得开发者可以轻松根据分配的标签浏览日志。

入门指南

安装前

由于此包使用 Redis 存储和管理日志,因此配置 Laravel 与 Redis 无缝工作非常重要。此外,请确保安装 Laravel 所需的 Redis 依赖项,如 predis

安装

composer require mrmmg/laravel_loggify 

接下来,您需要运行以下命令来发布 Loggify 资产和配置:

php artisan loggify:install

此命令将在 config 目录中创建 loggify.php 配置文件,并在 public/verndor/loggify 中创建 loggify 资产。

配置

loggify.php 配置文件包含注释块,具有自文档化。不过,我将提供解释以阐明。

数据库和 Redis database.redis

类似于 Laravel 的 config/database.php,本节描述 Redis 连接设置,您可以根据需要自定义。默认情况下,所有日志都存储在 Redis 数据库 10 中。

'database' => [
        'redis' => [
            'client' => env('REDIS_CLIENT', 'phpredis'),

            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => '10',
        ]
    ],

日志过期 log_expire_seconds

Redis 是一个内存数据库,因此管理日志内存使用至关重要。因此,您可以指定 Redis 应保留日志项的秒数。默认情况下,日志项保留 1 天,即 86,400 秒。

标签过期 log_tag_expire_seconds

此选项控制标签是否必须过期。如果您将其设置为正数,则表示每个标签可以保留在数据库中的秒数。默认设置为 false,表示日志不会过期。

日志标签限制 max_tag_items

此选项将控制每个日志标签可以包含多少日志项。

分页限制 per_page_items

此选项将控制网页面板每页最大项目数。默认值为 100。

用法

您可以使用 Laravel Log Facade 集成 Loggify。

示例

use Illuminate\Support\Facades\Log;

Log::channel('loggify')->info("Info Log Sample");

增强选项在哪里?

Laravel 日志方法第二个参数(称为上下文)被 Loggify 利用来管理日志 '标签' 和 '额外' 日志数据。让我们继续上一个示例

use Illuminate\Support\Facades\Log;

Log::channel('loggify')
            ->info("Info Log Sample", [
                'tags' => ['MY_CUSTOM_TAG']
            ]);

太好了!您已成功创建了一个带有 MY_CUSTOM_TAG 标签的日志。您可以根据需要使用任意数量的标签;没有固定的限制。

use Illuminate\Support\Facades\Log;

$user_id = \Illuminate\Support\Facades\Auth::id();
$user_type = ...;

Log::channel('loggify')
            ->info("User Logged-In", [
                'tags' => [
                    "USER_$user_id",
                    "API_VERSION_1",
                    "USER_TYPE_$user_type"
                ]
            ]);

向日志上下文中添加额外数据

use Illuminate\Support\Facades\Log;

Log::channel('loggify')
            ->info("Info Log Sample", [
                'tags' => ['INFO'],
                'extra' => ['Application Locale' => config('app.locale')]
            ]);

上下文中的其他元素按默认 Laravel 行为存储在日志堆栈中的 context 键下。

use Illuminate\Support\Facades\Log;

Log::channel('loggify')
            ->info("Info Log Sample", [
                'tags' => ['INFO'],
                'extra' => ['Application Locale' => config('app.locale')],
                'request_data' => $request->all()
            ]);

在上面的示例中,request_data 存储在上下文中,而标签和额外数据存储在日志的其他部分。

跟踪系统

Loggify 可以通过自动存储 PHP 调试回溯功能来帮助您调试和识别应用程序中的问题。您无需采取任何额外步骤;Loggify 为以下类型的日志存储回溯

  • debug
  • alert
  • critical
  • emergency
  • 错误
  • 警告

示例

use Illuminate\Support\Facades\Log;

Log::channel('loggify')
            ->debug(...)
            
Log::channel('loggify')
            ->alert(...)

Log::channel('loggify')
            ->critical(...)

Log::channel('loggify')
            ->emergency(...)

Log::channel('loggify')
            ->error(...)

Log::channel('loggify')
            ->warning(...)

上面提到的所有日志示例都将调试回溯存储在数据库中,您可以在Loggify网页面板中查看它们。

默认标签

默认情况下,Loggify会将两个标签添加到您的标签中,ALL_LOGSLOG_TYPE_{laravel_log_type}。例如

use Illuminate\Support\Facades\Log;

Log::channel('loggify')
            ->info("Info Log Sample", [
                'tags' => ['INFO'],
                'extra' => ['Application Locale' => config('app.locale')],
                'request_data' => $request->all()
            ]);

上述日志可以通过带有ALL_LOGSLOG_TYPE_INFOINFO标签的过滤在网页面板中定位。

网页面板

要查看存储的日志,请打开网页浏览器并导航到yourappurl.example/loggify路由。

过滤标签日志

通过在URL后传递日志标签,Loggify将显示带有该标签的日志,例如yourappurl.example/loggify/ALERT将显示所有带有ALERT标签的日志。

结果限制

通过将?limit=number传递给Loggify路由,您可以控制在网页面板中必须显示多少项,例如如果设置yourappurl.example/loggify?limit=1000,则在面板中显示最新的1000个元素。

网页面板授权

由于日志可能包含敏感数据,因此可以通过以下网关在生产环境中管理Loggify面板的访问控制。

注意:将此网关添加到app/Providers目录中的AuthServiceProvider中的合适位置。

// AuthServiceProvider::class

public function boot()
    {
        // ...

        Gate::define('viewLoggify', function ($user) {
            
        });
    }

闭包函数接受单个参数,即经过验证的用户对象。您可以使用此对象来确定用户是否可以访问/loggify路由。请注意,闭包必须返回一个布尔值。

屏幕截图

暗/亮主题

Loggify Dark Theme Loggify Light Theme

带有跟踪的日志

Loggify Trace Log Sample

标签信息

Loggify Light Theme

我需要您的帮助 🤝

我们欢迎社区贡献,以帮助进一步改进此包。如果您想合作并使其变得更好,请随时参与。

待办事项

  • 修复跟踪系统问题
  • 实现网页面板授权
  • 实现标签项限制
  • 实现标签过期
  • 实现网页面板分页
  • 实现测试
  • 制作更好的文档和GitHub页面
  • 重新设计WebPanel