Selamat datang di part 62 seri tutorial Tutorial Pemrograman! Kali ini, kita akan menyelami dunia advanced error handling and logging di PHP. Ini sangat penting untuk membangun aplikasi yang robust, mudah di-debug, dan dapat dipantau performanya. Part ini merupakan kelanjutan dari pembahasan tentang Advanced Session Handling, karena keduanya sama-sama penting dalam membangun aplikasi web yang profesional.
Prasyarat:
Error handling adalah proses mendeteksi, menangani, dan melaporkan error yang terjadi selama eksekusi program. Logging adalah proses mencatat informasi tentang jalannya program, termasuk error, warning, dan informasi penting lainnya. Bayangkan error handling sebagai detektif yang mencari masalah, dan logging sebagai penulis buku harian yang mencatat semua kejadian penting.
Dalam dunia nyata, jika sebuah aplikasi mengalami error tanpa penanganan yang tepat, itu seperti sebuah mobil yang menabrak tembok tanpa airbag dan sistem pengereman yang berfungsi. Akibatnya bisa fatal. Sebaliknya, dengan error handling dan logging yang baik, kita seperti memiliki mobil dengan airbag, ABS, dan sistem perekam data perjalanan (black box). Kita bisa meminimalisir dampak error dan menganalisis penyebabnya.
PHP memungkinkan kita untuk membuat error handler sendiri. Ini memberi kita kontrol penuh atas bagaimana error ditangani.
<?php
// Custom error handler function
function customErrorHandler($errno, $errstr, $errfile, $errline)
{
$logMessage = "[" . date("Y-m-d H:i:s") . "] Error: [$errno] $errstr in $errfile on line $errline\n";
// Log the error to a file
error_log($logMessage, 3, "error.log");
// Display user-friendly error message (optional)
echo "<b>Oops! Something went wrong.</b> Please try again later.\n";
}
// Set the custom error handler
set_error_handler("customErrorHandler");
// Trigger an error (for demonstration)
$result = 10 / 0;
?>
Penjelasan:
customErrorHandler(): Fungsi yang akan menangani error. Menerima parameter error number, error string, file, dan line number.$logMessage: Membentuk pesan error yang akan dicatat ke log.error_log(): Fungsi built-in PHP untuk mencatat error ke file. Parameter kedua (3) menunjukkan bahwa error akan dicatat ke file yang ditentukan di parameter ketiga ("error.log").set_error_handler(): Menetapkan fungsi customErrorHandler() sebagai error handler global.$result = 10 / 0;: Sengaja memicu error division by zero untuk demonstrasi.Exception handling adalah cara modern untuk menangani error di PHP. Ini menggunakan blok try...catch untuk menangkap dan menangani exception.
<?php
function divide($dividend, $divisor)
{
if ($divisor == 0) {
throw new Exception("Division by zero.");
}
return $dividend / $divisor;
}
try {
$result = divide(10, 0);
echo "Result: " . $result;
} catch (Exception $e) {
echo "Caught exception: " . $e->getMessage();
error_log("Exception: " . $e->getMessage(), 3, "error.log");
}
?>
Penjelasan:
divide(): Fungsi yang melakukan pembagian. Jika divisor adalah 0, maka akan melempar exception baru dengan pesan "Division by zero.".try...catch: Blok yang mencoba menjalankan kode yang berpotensi menimbulkan exception (divide(10, 0)). Jika exception terjadi, blok catch akan menangkapnya.$e->getMessage(): Mendapatkan pesan exception.error_log(): Mencatat pesan exception ke file log.Monolog adalah library logging yang populer di PHP. Ini menyediakan banyak fitur canggih untuk logging, seperti berbagai handler (file, database, email, dll.) dan formatters (JSON, HTML, dll.).
Instalasi:
composer require monolog/monolog
Contoh Penggunaan:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Create a logger
$log = new Logger('my_app');
$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));
// Add log messages
$log->warning('Foo');
$log->error('Bar');
?>
Penjelasan:
require_once __DIR__ . '/vendor/autoload.php';: Memuat autoloader Composer.use Monolog\Logger; dan use Monolog\Handler\StreamHandler;: Mengimpor class yang dibutuhkan dari Monolog.$log = new Logger('my_app');: Membuat instance Logger baru dengan nama 'my_app'.$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));: Menambahkan handler yang akan mencatat log ke file 'app.log' dengan level WARNING atau lebih tinggi (ERROR, CRITICAL, ALERT, EMERGENCY).$log->warning('Foo'); dan $log->error('Bar');: Menambahkan pesan log dengan level WARNING dan ERROR.Buatlah sebuah class PHP yang melakukan operasi matematika (penjumlahan, pengurangan, perkalian, pembagian). Gunakan exception handling untuk menangani error seperti division by zero atau input yang tidak valid. Gunakan Monolog untuk mencatat semua operasi yang dilakukan, termasuk input, output, dan error (jika ada).