Laravel - 错误与日志
Laravel - 错误处理与日志记录
Section titled “Laravel - 错误处理与日志记录”当你启动一个新的 Laravel 项目时,错误和异常处理已经为你配置好了。App\Exceptions\Handler 类用于记录你的应用程序抛出的所有异常,然后将其渲染回用户。Laravel 的目标是在开发期间提供详细的错误信息,并在生产环境中提供通用的、用户友好的错误页面。
调试模式 (APP_DEBUG)
Section titled “调试模式 (APP_DEBUG)”你的 .env 文件中的 APP_DEBUG 环境变量控制着实际向用户显示多少错误信息。
- 对于本地开发,
APP_DEBUG应设置为true。这将导致 Laravel 显示带有堆栈跟踪(stack traces)的详细错误页面,帮助你调试问题。 - 对于生产环境,
APP_DEBUG应始终设置为false。如果在生产环境中设置为true,你可能会将敏感的配置值或应用程序内部信息暴露给最终用户。
当 APP_DEBUG 为 false 时,Laravel 将显示一个通用错误页面。你可以通过在 resources/views/errors 目录中创建 Blade 模板来定制这些错误页面(例如,404.blade.php 用于“未找到”错误,500.blade.php 用于“服务器错误”)。
注意:在 .env 文件中更改 APP_DEBUG 变量后,如果你已经缓存了配置(php artisan config:cache),你应该清除缓存(php artisan config:clear)并重新缓存才能使更改生效;或者如果你未使用配置缓存,则只需重启你的开发服务器。
定制 HTTP 错误页面
Section titled “定制 HTTP 错误页面”Laravel 使得为各种 HTTP 状态码显示自定义错误页面变得容易。例如,要为 404 Not Found 错误创建一个自定义页面,请在 resources/views/errors/404.blade.php 创建一个文件。当发生 404 错误时,Laravel 会自动渲染此视图。
abort 助手函数可用于在应用程序的任何地方触发这些错误页面:
if (!Auth::user()->isAdmin()) { abort(403, 'Unauthorized action.'); // 触发 resources/views/errors/403.blade.php}日志记录是理解和调试应用程序行为的重要机制,尤其是在生产环境中。Laravel 提供了一个基于流行的 Monolog PHP 日志库构建的健壮日志系统。默认情况下,Laravel 配置为在 storage/logs 目录中为你的应用程序创建每日日志文件。
日志行为在 config/logging.php 文件中配置。此文件允许你配置应用程序的日志通道(log channels)。一个通道代表一种特定的写入日志信息的方式。例如,你可能将所有调试消息记录到本地文件,但将严重错误发送到 Slack 或 Sentry 等服务。
Laravel 支持几种内置的日志驱动/通道:
single: 一个单独的日志文件(storage/logs/laravel.log)。daily: 每日轮换日志文件。slack: 将日志消息发送到 Slack 通道。syslog: 将日志写入系统日志。errorlog: 使用 PHP 的error_log函数。stack: 允许你将多个通道组合成一个(例如,同时记录到文件和 Slack)。
你可以使用 .env 文件中的 LOG_CHANNEL 环境变量设置默认日志通道。例如:
LOG_CHANNEL=stack写入日志消息
Section titled “写入日志消息”你可以使用 Log Facade 将信息写入日志。日志记录器提供了 RFC 5424 中定义的八个日志级别:emergency(紧急), alert(警报), critical(严重), error(错误), warning(警告), notice(通知), info(信息), 和 debug(调试)。
use Illuminate\Support\Facades\Log;
Log::emergency($message);Log::alert($message);Log::critical($message);Log::error($message);Log::warning($message);Log::notice($message);Log::info('User logged in: ' . $user->id);Log::debug('Debugging an array:', ['key' => 'value']);上下文信息也可以作为数组传递给日志方法:
Log::info('User {id} failed to login.', ['id' => $userId, 'attempt_ip' => $request->ip()]);生成的日志条目通常可以在 storage/logs/laravel.log 中找到(如果使用 daily 驱动,则为 laravel-YYYY-MM-DD.log)。定期查看日志对于监控应用程序健康状况和排除问题至关重要。
有关更高级的日志配置,例如自定义 Monolog 格式化器或使用特定通道,请参考 Laravel 官方日志文档。