Laravel默认使用Monolog库记录日志,核心日志文件路径为storage/logs/laravel.log。当应用出现错误时,优先查看该文件的最新记录,可获取详细的错误类型(如语法错误、数据库连接失败)、堆栈跟踪及上下文信息,是定位问题的基础工具。
修改项目根目录下的.env文件,将APP_DEBUG设置为true(仅限开发环境),此时Laravel会显示完整的错误页面(包含错误详情、触发文件及行号),而非默认的“500 Internal Server Error”。需注意:生产环境务必将其设为false,避免敏感信息泄露。
composer require barryvdh/laravel-debugbar --dev),安装后会在页面底部显示调试面板,包含请求/响应头、数据库查询(含执行时间)、路由参数、会话数据、视图渲染时间等信息,直观呈现请求生命周期的关键指标。composer require laravel/telescope安装,运行php artisan telescope:install初始化并迁移数据库,访问/telescope路径可查看请求历史、异常详情、队列任务、邮件发送记录等深度信息,适合复杂问题的追踪。使用Artisan的tinker命令(php artisan tinker)进入REPL(交互式命令行),可直接执行PHP代码并与Laravel应用交互。常用操作:
DB::listen(function($query) { dump($query->sql, $query->bindings); });(实时输出执行的SQL语句及参数);dump($variable)(结构化显示变量值);User::find(1))验证代码正确性。composer install确保所有必需的PHP包(如Laravel框架、数据库驱动、第三方库)已正确安装;若依赖冲突,可使用composer update更新或composer diagnose诊断问题。.env文件中的关键配置(如数据库连接DB_HOST/DB_DATABASE/DB_PASSWORD、缓存驱动CACHE_DRIVER、队列驱动QUEUE_CONNECTION),确保与Debian系统中的实际设置一致(如数据库服务是否运行)。php artisan config:clear清除配置缓存,确保新配置生效;生产环境可使用php artisan config:cache提升性能,但调试时需禁用缓存。sudo nginx -t验证配置文件语法(如server块是否正确指向public目录、index指令是否包含index.php);查看Nginx错误日志(/var/log/nginx/error.log),定位404、502等Web服务器级错误。storage(日志、缓存文件写入)和bootstrap/cache(编译后的视图/路由缓存)目录具有正确的读写权限,推荐命令:sudo chown -R www-data:www-data storage bootstrap/cache(www-data为Debian下Nginx/Apache的默认用户)、sudo chmod -R 755 storage bootstrap/cache。Laravel会缓存路由、配置、视图、包元数据等,缓存过期或损坏可能导致意外错误。调试时运行以下命令清除所有缓存:
php artisan route:clear(清除路由缓存)、php artisan config:clear(清除配置缓存)、php artisan view:clear(清除视图缓存)、php artisan cache:clear(清除通用缓存)。
php -v确认系统PHP版本是否符合Laravel要求(如Laravel 10需要PHP≥8.1);若版本过低,使用sudo apt install php8.2(Debian默认仓库)或添加Ondřej Surý的PHP仓库安装更高版本。php-mysql(数据库)、php-curl(HTTP请求)、php-gd(图像处理)、php-mbstring(多字节字符串)、php-xml(XML解析)),可通过sudo apt install php-mysql php-curl php-gd php-mbstring php-xml一次性安装。php artisan route:list查看所有注册的路由(包括URI、方法、对应控制器),确认路由是否存在或冲突;若路由未生效,检查routes/web.php/routes/api.php文件中的路由定义。dd(DB::getQueryLog())),或使用DB::enableQueryLog()开启查询日志,查看执行的SQL语句及参数,排查慢查询、语法错误或数据不一致问题。User::with('posts')->get()),避免N+1查询问题,减少调试时的数据库负载;.env.development(开发环境)和.env.production(生产环境)区分配置,通过php artisan env切换,确保调试配置不会影响线上环境。