twentysix22 / laraveleslogs
Laravel的Elasticsearch结构化日志
Requires
- ext-json: *
- elasticsearch/elasticsearch: ^7.8
- illuminate/support: ^8.0
- laravel/helpers: ^1.2
- ramsey/uuid: ^4.1
Requires (Dev)
- mockery/mockery: ^1.3.1
- orchestra/testbench: ~3|~4
- phpunit/phpunit: ^8.0
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2024-09-14 22:32:05 UTC
README
将Laravel的日志结构化并输出到Elasticsearch。轻松记录请求和作业,同时记录关键上下文信息到Elasticsearch索引,以便于搜索和分析。
查看 contributing.md 了解待办事项列表。
安装
通过Composer
$ composer require twentysix22/laraveleslogs
用法
在laravel中发布提供者
php artisan vendor:publish --provider="Twentysix22\LaravelESLogs\LaravelESLogsServiceProvider"
将路由中间件别名添加到app/Http/Kernel.php
protected $routeMiddleware = [ ..., ..., 'log' => \Twentysix22\LaravelESLogs\Services\Logging\Requests\LogRequest::class,
配置 .env
LOG_GROUP=some-group LOG_ELASTICSEARCH_HOST=localhost:9200 LOG_ELASTICSEARCH_KEEP_DAYS=5 LOG_JOBS=true LOG_JOB_ATTEMPTS=true LOG_REQUESTS=true LOG_REDACTION_INK=REDACTED LOG_ELASTICSEARCH_AUTH_TYPE=url [url or apikey] LOG_ELASTICSEARCH_AUTH_API_ID= LOG_ELASTICSEARCH_AUTH_API_KEY= LOG_REQUEST_MAX_SIZE= (size in characters) LOG_RESPONSE_MAX_SIZE= (size in characters) LOG_ELASTICSEARCH_INDEX_DATE_PATTERN="Y.m.d"
在config/app.php中将提供者添加到你的提供者数组中
\Twentysix22\LaravelESLogs\LaravelESLogsServiceProvider::class,
初始化Elasticsearch索引。
此步骤不是必需的,除非你希望重置任何当前索引。
php artisan laraveleslogs:configure
通过保留天数配置日志的自动清理。
你可以运行一个每日命令来清理旧日志,这将使用LOG_ELASTICSEARCH_KEEP_DAYS
环境变量指定的天数保留。
php artisan laraveleslogs:tidy
记录请求
将中间件 'log:{namespace}' 应用到你的路由以开始记录请求。 (如果你想省略命名空间参数也可以,但为了日志的清晰性,指定它是有用的) 例如
Route::get('/', function () { return view('welcome'); })->middleware('log:home');
你可以将此中间件添加到单个路由、分组,甚至你的全局路由中间件,如果你只想记录每个请求/响应。 (但我们建议你更具体地记录日志 :-) )
添加请求上下文
你可以在你的请求控制器中使用Trait use ReportsRequestContext;
。这为你的日志提供了应用上下文的一些选项。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Twentysix22\LaravelESLogs\Services\Logging\Requests\ReportsRequestContext; class TestController extends Controller { use ReportsRequestContext; public function test() { $this->logContext([ 'key' => 'value', 'key2' => 'value2', ]); $this->logGlobalContext([ 'globalkey' => 'value', 'globalkey2' => 'value2', ]); return response()->json([ 'hello' => 'world', ]); } }
记录作业
如果你按照上述方式配置了.env,作业的记录将默认启用。
记录作业上下文
你可以使用与请求类似的Trait来记录作业的上下文 - 将use ReportsJobContext;
添加到你的作业中。例如
use Twentysix22\LaravelESLogs\Services\Logging\Jobs\ReportsJobContext; class TestJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use ReportsJobContext; /** * Create a new job instance. * * @return void */ public function __construct() { // } /** * Execute the job. * * @return void */ public function handle() { $this->logContext([ 'key' => 'value', 'key2' => 'value2', ]); $this->logGlobalContext([ 'globalkey' => 'value', 'globalkey2' => 'value2', ]); } }
设置自定义上下文名称。
你可以使用Trait ReportsJobContext
或 ReportsRequestContext
来设置自定义上下文名称。
$this->setContextName('custom-context-name');
从日志中删除敏感信息。
出于各种数据保护原因,你绝对不应该在日志中记录敏感信息。你可以在/config/laraveleslogs.php
中配置一个敏感键列表,你希望从日志中删除这些键。
// Keys used to catch elements in logging array keys - will be replaced with redaction ink // and not displayed in logs. 'redaction' => [ 'password', 'password_confirmation', 'authorization', 'telephone_number', 'email', 'algolia_key', 'access-token' ], // The ink used to redact sensitive keys in logs. 'redaction_ink' => config('LOG_REDACTION_INK', '[--REDACTED--]'),
你还可以通过配置环境变量LOG_REDACTION_INK
来指定将替换这些敏感键的红色墨水字符串。
变更日志
请参阅changelog 了解最近的变化。
测试
$ composer test
贡献
请参阅 contributing.md 了解详情和待办事项列表。
安全
如果你发现任何与安全相关的问题,请通过作者的电子邮件而不是使用问题跟踪器来联系。
鸣谢
许可
许可。请参阅许可文件 了解更多信息。