如何实现Laravel中间件来有效记录请求日志?
- 内容介绍
- 文章标签
- 相关推荐
本文共计918个文字,预计阅读时间需要4分钟。
由于日志配置错误导致日志输出异常,常见情况是在中间件中使用了`Log::info()`,但`config/logging.php`中对相应`channel`的`driver`配置有误。例如,错误配置可能如下:
- 检查
config/logging.php中你用的 channel 是否存在、driver和必要参数(如path、level)是否齐全 - 避免在中间件里硬编码 channel 名,优先复用默认
stack:直接用Log::info(),它走的是config('logging.default') - 调试时临时加一行
Log::stack(['single'])->info('test');看是否能落盘,确认是配置问题还是中间件执行时机问题
app/Http/Middleware/LogRequest.php 怎么拿到完整请求体?
Laravel 默认把 $request->getContent() 读过一次后清空,中间件里再调用就是空字符串——这是最常踩的坑。不是你代码写错了,是 PSR-7 的 immutable request 特性在起作用。
本文共计918个文字,预计阅读时间需要4分钟。
由于日志配置错误导致日志输出异常,常见情况是在中间件中使用了`Log::info()`,但`config/logging.php`中对相应`channel`的`driver`配置有误。例如,错误配置可能如下:
- 检查
config/logging.php中你用的 channel 是否存在、driver和必要参数(如path、level)是否齐全 - 避免在中间件里硬编码 channel 名,优先复用默认
stack:直接用Log::info(),它走的是config('logging.default') - 调试时临时加一行
Log::stack(['single'])->info('test');看是否能落盘,确认是配置问题还是中间件执行时机问题
app/Http/Middleware/LogRequest.php 怎么拿到完整请求体?
Laravel 默认把 $request->getContent() 读过一次后清空,中间件里再调用就是空字符串——这是最常踩的坑。不是你代码写错了,是 PSR-7 的 immutable request 特性在起作用。

