Treat errors as first-class signals; provide context and paths to remediation.
Commands
// app/Exceptions/Handler.php
public function register(): void
{
$this->reportable(function (DomainException $e) {
Log::warning('domain exception', ['code' => $e->getCode()]);
});
$this->renderable(function (ModelNotFoundException $e, $request) {
if ($request->expectsJson()) {
return response()->json(['message' => 'Not Found'], 404);
}
});
}
Patterns
-
Use domain-specific exceptions for expected error paths
-
Add structured context to logs; avoid logging secrets
-
Route noisy logs to separate channels; keep defaults actionable
-
Convert to API-appropriate responses in
renderable()