laravel 怎么记录用户操作日志?

laravel 怎么记录用户操作日志?

阅读 15.9k
4 个回答

也许你是想要这种方式:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

//每次请求都记录下请求方式、请求地址、提交数据
class OperationLog {
    public function handle(Request $req, Closure $next) {
        $user_id = 0;
        if(Auth::guard('admin')->check()) {
            $user_id = (int) Auth::guard('admin')->user()->id;
        }
        $input = $req->all();
        $log = new \App\Models\OperationLog();
        $log->setAttribute('user_id', $user_id);
        $log->setAttribute('path', $req->path());
        $log->setAttribute('method', $req->method());
        $log->setAttribute('ip', $req->ip());
        $log->setAttribute('input', json_encode($input, JSON_UNESCAPED_UNICODE));
        $log->save();
        return $next($req);
    }
}

一个记录用户操作数据库日志的方法,
在 Providers/AppServiceProvider.php 的 boot 方法内添加一下代码:

public function boot()
    {
        //
        \DB::listen(function ($query, $binds) {
            foreach ($binds as $bind) {
                $query = preg_replace('/\?/', '\'' . $bind . '\'', $query, 1);
            }
            \Log::info($query);
        });
    }

然后在 storage/logs 文件夹下面的 laravel.log 查看具体的 sql 语句了。
参考打印 Laravel 的 SQL 语句

看你想要的记录包括哪些方面;
普通url的访问日志,开启nginxaccess_log 就有;
数据库操作日志,监听SQL就行。
如果你想按照自己的意愿实现可读性更高的日志的话,那就自己写,具体根据你想要的效果去实现,可能会很复杂,但编程本来就没有捷径,自己研究多了慢慢就简单了;有些事不一定要问。

clipboard.png

clipboard.png

推荐问题
宣传栏