执行Composer install后运行php artisan出现Uncaught TypeError报错如何解决
报错问题排查与解决方案
完整报错信息:
Uncaught TypeError: Argument 1 passed to Illuminate\Log\Logger::__construct() must be an instance of Psr\Log\LoggerInterface, instance of Monolog\Logger given
根本原因
该报错由Laravel框架版本与Monolog日志依赖版本不兼容导致:当前项目安装的Monolog版本与Laravel要求的版本范围不匹配,Monolog\Logger实例不符合Psr\Log\LoggerInterface的类型约束,触发参数类型校验失败。
排查步骤
- 查看当前项目Laravel版本:若
php artisan命令可执行,运行php artisan --version;若不可执行,直接查看composer.json内laravel/framework对应的版本号 - 查看当前安装的Monolog版本:运行
composer show monolog/monolog - 对照Laravel对应版本的依赖要求,确认Monolog版本是否符合要求:Laravel 5.x仅支持Monolog 1.x版本,Laravel 6及以上版本支持Monolog 2.x/3.x版本
解决方法
方案1:锁定Monolog版本重装依赖
- 打开项目根目录的
composer.json,在require节点手动添加对应版本约束:- Laravel 5.x版本添加:
"monolog/monolog": "^1.25"- Laravel 6及以上版本添加:
"monolog/monolog": "^2.0" - 清理旧依赖和锁定文件:
rm -rf vendor rm composer.lock - 重新安装依赖:
composer install
方案2:升级Laravel到兼容版本
若项目允许框架升级,直接执行命令升级Laravel并自动适配依赖:
composer update laravel/framework --with-dependencies
方案3:检查自定义日志配置
若以上方案无效,检查config/logging.php内是否存在自定义日志驱动配置,确认没有手动错误实例化Monolog类并注入Laravel日志服务容器,恢复默认日志配置后重试即可。
内容的提问来源于stack exchange,提问作者Umer Fayyaz
相关产品推荐
相关产品推荐

