在 laravel 的错误日志中记录 IP

缘起是这种日志:

image-20240310上午92427013

一般来说这种日志在 nginx 上很常见,但穿透到 nginx 到实际的应用里,已经说明是有针对性的攻击行为了,需要记录在案。先把 IP 记录下来。

要在 Laravel 中的错误日志中打印客户端 IP,你可以使用 Laravel 的异常处理机制:

  1. 打开 app/Exceptions/Handler.php 文件。

  2. 导入 Illuminate\Http\Request 类。

    use Illuminate\Http\Request;
    
  3. 使用 PHP 默认的 $__SERVER 字段获取远端IP:

    image-20240310上午92905943

  4. 也可以用 request() 方法 :

    public function report(Exception $exception)
    {
        if ($this->shouldReport($exception)) {
            $this->logClientIP($exception, request());
        }
       
        parent::report($exception);
    }
    protected function logClientIP(Exception $exception, Request $request)
    {
        $ip = $request->ip();
        $message = $exception->getMessage();
        $trace = $exception->getTraceAsString();
        $log = "IP: $ip\nMessage: $message\nTrace: $trace";
       
        \Log::error($log);
    }
    

shell命令屏蔽错误消息

我在 Mac 下用命令行搜索文件:

sudo find / -name "com.google.Keystone.plist"

输出了很多没有权限的内容:

find: /Library/Application Support/com.apple.TCC: Operation not permitted 
find: /Library/Caches/com.apple.amsengagementd.classicdatavault: Operation not permitted 
find: /Library/Caches/com.apple.aneuserd: Operation not permitted

这时候可以使用重定向 2>/dev/null ,将这些错误信息屏蔽掉:

sudo find / -name "com.google.Keystone.plist" 2>/dev/null