Jenkins自动部署Dolibarr后出现Psr\Log\AbstractLogger类找不到错误求助
排查Dolibarr部署后Psr\Log\AbstractLogger缺失错误的方法
核心问题:错误提示找不到Psr\Log\AbstractLogger类,这个类属于PSR-Log标准库,是DebugBar的依赖项。虽然你确认了测试和生产环境文件一致,但自动加载失败大概率和路径配置、权限、缓存或部署遗漏有关,以下是适合QNAP环境的排查步骤:
1. 确认PSR-Log依赖文件是否完整
- 手动检查测试环境中
Psr\Log\AbstractLogger对应的文件路径,通常是/share/ZFS2_DATA/Web/dolibarr/htdocs/vendor/psr/log/Psr/Log/AbstractLogger.php,确认文件存在,且和生产环境的文件内容、大小完全一致。 - 重点排查Jenkins部署是否遗漏了
vendor/psr/log整个目录——比如部署脚本没拉取composer依赖,或者.gitignore排除了vendor目录导致文件没同步。
2. 对比PHP的include_path配置
- 分别在测试和生产环境创建
phpinfo.php文件,内容:<?php phpinfo(); ?> - 访问后查看
include_path项,确认两个环境的配置完全一致。如果测试环境的include_path没包含vendor目录的路径,自动加载器会找不到类文件。 - 也可以在测试环境的出错文件(比如
MessagesCollector.php)开头加临时代码:echo get_include_path();,直接对比生产环境的输出。
3. 检查文件与目录权限
QNAP NAS的权限经常是坑,尤其是Jenkins部署后文件的所有者可能和生产环境不一致:
- SSH登录QNAP,执行命令查看权限:
ls -l /share/ZFS2_DATA/Web/dolibarr/htdocs/vendor/psr/log/Psr/Log/ - 和生产环境的对应目录权限对比,确保运行PHP的用户(通常是
apache或www-data)有文件读权限。 - 可以尝试递归修复权限:
(根据QNAP上实际运行PHP的用户调整所有者)chmod -R 755 /share/ZFS2_DATA/Web/dolibarr/htdocs/vendor chown -R apache:apache /share/ZFS2_DATA/Web/dolibarr/htdocs/
4. 清除PHP OPcache缓存
如果开启了OPcache,测试环境可能缓存了旧的自动加载信息:
- 临时关闭OPcache:编辑测试环境的
php.ini,设置opcache.enable=0,重启Apache后测试。 - 或者临时在Dolibarr的
main.inc.php开头加一行代码:
测试完成后记得删除这行代码。<?php opcache_reset(); ?>
5. 检查自动加载器的路径配置
- 打开测试环境的
/share/ZFS2_DATA/Web/dolibarr/htdocs/debugbar/class/autoloader.php,查看里面的路径逻辑,是否有硬编码的生产环境绝对路径?比如是否写死了某个目录导致测试环境加载失败。 - 对比生产环境的同文件,确认自动加载器用的是相对路径而非固定绝对路径。
6. 手动测试类加载
创建一个简单的测试脚本放在Dolibarr根目录,验证自动加载逻辑:
<?php // 注册DebugBar自动加载器 require_once 'htdocs/includes/maximebf/debugbar/src/DebugBar/Autoloader.php'; DebugBar\Autoloader::register(); // 尝试加载目标类 if (class_exists('Psr\Log\AbstractLogger')) { echo '类加载成功'; } else { echo '类加载失败,当前自动加载器列表:'; var_dump(spl_autoload_functions()); } ?>
运行脚本后,根据输出判断是DebugBar的自动加载器没覆盖PSR-Log路径,还是PSR-Log的自动加载器根本没被注册。
7. 检查Jenkins部署脚本细节
- 确认Jenkins部署时是否执行了
composer install——如果Dolibarr的依赖是通过composer管理的,部署时必须执行该命令生成完整的vendor目录。 - 检查部署脚本是否有文件过滤规则,比如是否跳过了
.php以外的文件,或者忽略了隐藏文件(虽然PSR-Log里没有,但某些自动加载配置可能依赖)。
内容的提问来源于stack exchange,提问作者Daviid
相关产品推荐
相关产品推荐

