mrmmg / laravel_loggify
一个 Laravel 扩展包,提供了一种简单高效的方式使用 Redis 存储日志消息。
Requires
- php: ^8.0.2
- illuminate/redis: >=9.0
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_LOGS
和LOG_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_LOGS
、LOG_TYPE_INFO
和INFO
标签的过滤在网页面板中定位。
网页面板
要查看存储的日志,请打开网页浏览器并导航到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
路由。请注意,闭包必须返回一个布尔值。
屏幕截图
暗/亮主题
带有跟踪的日志
标签信息
我需要您的帮助 🤝
我们欢迎社区贡献,以帮助进一步改进此包。如果您想合作并使其变得更好,请随时参与。
待办事项
- 修复跟踪系统问题
- 实现网页面板授权
- 实现标签项限制
- 实现标签过期
- 实现网页面板分页
- 实现测试
- 制作更好的文档和GitHub页面
- 重新设计WebPanel