laravel 11 中数据库缓存日志需手动配置,推荐监听 cachehit 等四个内置事件,或使用 loggingcacheproxy 包装器实现精准日志记录,亦可启用 redis 协议级日志及 telescope 可视化辅助调试。

在 Laravel 11 中,数据库缓存日志不是自动开启的,它需要你主动配置——因为缓存操作本身不触发日志,Laravel 也不默认记录 Cache::get、Cache::put 等调用。要排查缓存命中率低、数据不一致或键失效异常,必须手动启用日志机制。
监听 Cache 内置事件(推荐,侵入小)
Laravel 11 完整支持 CacheHit、CacheMissed、KeyWritten 和 KeyForgotten 四个事件,适用于 Redis、Memcached、DynamoDB 等所有支持事件的驱动(file 和 database 驱动也支持)。
- 运行命令生成监听器:
php artisan make:listener LogCacheHit --event="Illuminate\Cache\Events\CacheHit" - 在
handle方法中写入日志:logger()->debug('[CACHE HIT]', ['key' => $event->key, 'type' => get_debug_type($event->value)]); - 为其余三个事件分别创建监听器,并统一注册到
AppServiceProvider的$listen数组 - 确保缓存驱动已启用标签支持(如使用 Redis):
'taggable' => true在config/cache.php对应 store 中
使用 LoggingCacheProxy 包装器(精准可控)
适合需记录参数值、TTL、tags、调用栈等完整上下文的深度调试场景,性能影响轻微且可开关。
- 新建
app/Cache/LoggingCacheProxy.php,实现Illuminate\Contracts\Cache\Repository - 在
get()中记录 key、tags、是否命中;在put()中记录 key、ttl、value 类型与长度(避免日志爆炸) - 在
config/cache.php的stores中添加新驱动:'logged' => ['driver' => 'custom', 'via' => App\Cache\LoggingCacheProxy::class] - 调试时显式调用:
Cache::store('logged')->get('user_profile_123')
开启 Redis 协议级命令日志(仅限本地开发)
当怀疑缓存驱动行为异常(如 setnx 失败、过期策略不生效),可临时启用 Redis 原生命令日志,直接观察发往服务端的指令。
- 修改
config/database.php中 Redis 连接配置,在options下添加:'prefix' => 'dev:', 'parameters' => ['logging' => true] - 启动 Redis 服务时加参数:
redis-server --loglevel verbose(仅测试环境) - 或使用
redis-cli monitor实时抓取所有命令(注意高并发下输出量大)
配合 Telescope 查看缓存活动(可视化辅助)
如果你已安装 Laravel Telescope(v5+ 兼容 Laravel 11),它会自动捕获并展示缓存事件,含时间线、键名、驱动、TTL、是否命中等字段。
- 确保
TELESCOPE_CACHE_WATCHER_ENABLED=true在.env中启用 - 访问
/telescope→ 切换到 “Cache” 标签页,可按 key、driver、type 过滤 - 点击单条记录可查看完整调用栈(包括哪个控制器或命令触发)











