You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)有文件读权限。
  • 可以尝试递归修复权限:
    chmod -R 755 /share/ZFS2_DATA/Web/dolibarr/htdocs/vendor
    chown -R apache:apache /share/ZFS2_DATA/Web/dolibarr/htdocs/
    
    (根据QNAP上实际运行PHP的用户调整所有者)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:43:20