twentysix22/laraveleslogs

Laravel的Elasticsearch结构化日志

2.0.5 2021-11-14 16:13 UTC

README

Latest Version on Packagist Total Downloads

将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 ReportsJobContextReportsRequestContext 来设置自定义上下文名称。

$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 了解详情和待办事项列表。

安全

如果你发现任何与安全相关的问题,请通过作者的电子邮件而不是使用问题跟踪器来联系。

鸣谢

许可

许可。请参阅许可文件 了解更多信息。