Debugging dan error handling adalah aspek penting dalam pengembangan aplikasi. NexaUI Framework menyediakan berbagai tools dan teknik untuk membantu Anda mengidentifikasi, melacak, dan menyelesaikan masalah dalam aplikasi Anda.
NexaUI memiliki mode debug yang dapat diaktifkan melalui file .env
:
APP_DEBUG=true
Ketika mode debug aktif:
Untuk lingkungan produksi, pastikan mode debug dinonaktifkan:
APP_DEBUG=false
Dalam mode produksi, error tidak ditampilkan ke pengguna, tetapi dicatat ke log.
NexaUI menyediakan class NexaDebug
yang menawarkan berbagai metode untuk debugging:
use App\System\Helpers\NexaDebug;
// Menampilkan variabel dengan format yang mudah dibaca
NexaDebug::dump($variable);
// Menampilkan variabel dan menghentikan eksekusi
NexaDebug::dd($variable);
// Menampilkan backtrace
NexaDebug::backtrace();
// Mencatat pesan ke log
NexaDebug::log('Pesan debug', 'info');
// Mengukur waktu eksekusi
NexaDebug::startTimer('query');
// ... kode yang akan diukur
$executionTime = NexaDebug::endTimer('query');
NexaUI menggunakan sistem error handling yang komprehensif yang menangkap dan mengelola exception
dan error. Sistem ini diinisialisasi di index.php
:
// index.php
try {
// Initialize Nexa
$nexa = Nexa::getInstance();
// Initialize debug system
NexaDebug::init();
NexaDebug::setErrorHandler();
// Run the application
$nexa->Tatiye()->run();
} catch (Exception $e) {
// Handle fatal errors
$debugMode = ($_ENV['APP_DEBUG'] ?? 'false') === 'true';
if ($debugMode) {
echo "Fatal Error
";
echo "Message: " . $e->getMessage() . "
";
echo "File: " . $e->getFile() . " on line " . $e->getLine() . "
";
echo "" . $e->getTraceAsString() . "
";
} else {
echo "Something went wrong
";
echo "Please try again later.
";
}
// Log error
if (function_exists('error_log')) {
error_log($e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
}
}
Anda dapat membuat custom exception handler untuk menangani jenis exception tertentu:
// Mendefinisikan custom exception
class ValidationException extends Exception {}
// Di controller
try {
$validation = $this->validate($data);
if (!$validation->passes()) {
throw new ValidationException('Validation failed');
}
} catch (ValidationException $e) {
// Handle validation error
return $this->redirectWithErrors('/form', $validation->errors());
} catch (Exception $e) {
// Handle other exceptions
NexaDebug::log($e->getMessage(), 'error');
return $this->error500();
}
NexaUI menyediakan sistem logging yang fleksibel untuk mencatat informasi, peringatan, dan error.
Log disimpan di direktori system/log/
.
Sistem logging mendukung berbagai level:
debug
- Informasi detail untuk debugginginfo
- Informasi umumnotice
- Kejadian normal tapi signifikanwarning
- Peringatan (tidak fatal)error
- Error runtimecritical
- Kondisi kritisalert
- Tindakan harus diambil segeraemergency
- Sistem tidak dapat digunakanuse App\System\Helpers\NexaDebug;
// Log dengan level default (info)
NexaDebug::log('User logged in: ' . $user->email);
// Log dengan level tertentu
NexaDebug::log('Database connection failed', 'error');
// Log dengan konteks tambahan
NexaDebug::log('Payment processed', 'info', [
'user_id' => $user->id,
'amount' => $payment->amount,
'status' => $payment->status
]);
Konfigurasi logging dapat diatur di system/Config/logging.php
:
return [
// Default log channel
'default' => 'daily',
// Log channels
'channels' => [
'single' => [
'driver' => 'single',
'path' => SYSTEM_PATH . '/log/nexa.log',
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => SYSTEM_PATH . '/log/nexa.log',
'level' => 'debug',
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => 'your-slack-webhook-url',
'username' => 'NexaUI Logger',
'emoji' => ':boom:',
'level' => 'critical',
],
],
];
NexaUI menyertakan Debug Bar yang menampilkan informasi debugging di bagian bawah halaman ketika mode debug aktif. Debug Bar menampilkan:
Debug Bar dapat diaktifkan di .env
:
APP_DEBUG_BAR=true
NexaUI menyediakan halaman error default untuk HTTP error umum. Anda dapat menyesuaikan
halaman-halaman ini dengan membuat file di direktori templates/
:
templates/404.html
- Not Foundtemplates/500.html
- Internal Server Errortemplates/403.html
- Forbiddentemplates/401.html
- UnauthorizedContoh halaman 404 kustom:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Not Found</title>
<link rel="stylesheet" href="https://tatiye.net/assets/css/style.css">
</head>
<body>
<div class="container error-page">
<h1>404 - Page Not Found</h1>
<p>Maaf, halaman yang Anda cari tidak ditemukan.</p>
<p><a href="{link/}">Kembali ke Beranda</a></p>
</div>
</body>
</html>
system/log/
untuk melihat error dan warning.
var_dump()
dan memformat output
agar lebih mudah dibaca.
NexaDebug::enableQueryLog();
// ... kode dengan query database
$queries = NexaDebug::getQueryLog();
NexaDebug::dump($queries);
NexaDebug::dump($this->request->headers);
NexaDebug::dump($this->response->getBody());