laravel系统日志,请求日志友好化,可持续化

2023年2月9日09:59:09

laravel日志查看组件

方案一:

composer require rap2hpoutre/laravel-log-viewer
地址:https://packagist.org/packages/rap2hpoutre/laravel-log-viewer
安装 (Laravel)
通过composer安装

composer require rap2hpoutre/laravel-log-viewer

config/app.phpproviders部分已添加

Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class,

在路由文件中添加:

Route::get('logs', [\Rap2hpoutre\LaravelLogViewer\LogViewerController::class, 'index']);

访问 http://域名/logs 或者放在其他路由地址上

增加登录验证:

<?php

namespace App\Http\Controllers\Open;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Rap2hpoutre\LaravelLogViewer\LogViewerController;
use Exception;

class LogsController extends BaseController
{
    //登录地址 http://www.db.com/logs/login?name=name&pwd=pwd
    public function login(Request $request)
    {
        try {
            $name = parameterCheck($request->name, 'string', '');
            $pwd = parameterCheck($request->pwd, 'string', '');

            if ($name == env('LOG_NAME', 'name') && $pwd == env('LOG_PWD', 'pwd')) {
                request()->session()->put('auth_logs', $name . $pwd);
                return redirect(URL::to('/logs/index'));
            } else {
                abort(403, '账号密码错误!');
            }

        } catch (Exception $e) {
            abort(403, '登录异常');
        }
    }

    public function index(Request $request)
    {
        $auth = $request->session()->get('auth_logs');
        if (!empty($auth)) {
            $obj = new  LogViewerController($request);
            return $obj->index($request);
        } else {
            abort(403, '请先登录');
        }
    }
}

image

点评: 可以支持日志文件目录下的多层级文件目录扫描,很方便定制化的日志文件,支持内容搜索,性能更好

方案二:

composer require arcanedev/log-viewer

地址:https://packagist.org/packages/arcanedev/log-viewer#8.3.0

Laravel
安装
注意 : 如果您使用的是Laravel>=v5.5,那么包将自动注册自己,因此您可以跳过本节

安装包后,可以在providers数组的config/app.php中注册服务提供程序

'providers' => [
    ...
    Arcanedev\LogViewer\LogViewerServiceProvider::class,
],

不需要注册LogViewer外观,它是自动完成的.

重要说明:

对于Laravel 8.x及更高版本,您需要将分页样式与LogViewer模板相匹配。默认分页使用tailwindcss作为默认样式。

Artisan 命令:
要发布配置文件和翻译文件,请运行以下命令:
php artisan log-viewer:publish
image
image
image

config/log-viewer.php

    'route'         => [
        'enabled'    => true,

        'attributes' => [
            'prefix'     => 'log-viewer',
			//改成你需要授权的中间件
            'middleware' => ['web', 'log.view'],
        ],
    ],

https://github.com/ARCANEDEV/LogViewer/issues/69
log.view路由中间件

 public function handle($request, Closure $next)
    {

        $auth = $request->session()->get('auth_view_logs');
        if (empty($auth)) {
            abort(403, '请先登录');
        }

        return $next($request);
    }

点评::不支持多层级文件目录,支持搜索,但是统计方面更视觉化,日志内容有json内容格化式展示,官方也提供的路由方法
但是第一次打开慢一些,业务需要生成索引

方案三

EFK 或者 ELK这个是很成熟的方案了,但是需要的服务器资源较多,如果有需求还是有必要搭一下,难度也不大,本地开发就方案一或者方案二就可以了

prometheus+grafana这个是支持k8s对未来的整理系统架构更好,比较推荐,图形化效果更好,还能定制数据图标

方案四

一些企业成熟的开源业务方案:
美团的logan,比较推荐,特别是想做用户画像的日志采集系统的,支持npm,安卓,ios sdk
腾讯的xlog,sdk支持不好,需要自己开发

posted on 2023-02-14 10:35  zh7314  阅读(271)  评论(0编辑  收藏  举报