Menu Navigasi

Tutorial Tutorial Pemrograman Part 62: Advanced Error Handling and Logging in PHP

AI Generated
29 Desember 2025
20 views
Tutorial Tutorial Pemrograman Part 62: Advanced Error Handling and Logging in PHP

Pendahuluan

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:

  • Pengetahuan dasar tentang PHP dan konsep error handling.
  • Pemahaman tentang file I/O di PHP.
  • Sedikit pengalaman dengan session handling (sebagai referensi dari part sebelumnya).

Konsep Dasar

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.

Hands-on Coding

1. Custom Error Handler

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.

2. Exception Handling

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.

3. Logging dengan Monolog

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.

Common Pittfalls

  • Tidak menangani error sama sekali: Ini adalah kesalahan fatal. Aplikasi akan rentan terhadap crash dan sulit di-debug.
  • Menampilkan pesan error detail ke user: Ini berbahaya karena dapat mengungkap informasi sensitif tentang sistem.
  • Tidak mencatat error: Tanpa logging, sulit untuk menganalisis penyebab error dan meningkatkan kualitas aplikasi.
  • Terlalu banyak logging: Logging yang berlebihan dapat membebani sistem dan membuat file log sulit dianalisis.
  • Menggunakan logging level yang salah: Gunakan level yang sesuai untuk setiap jenis pesan (DEBUG, INFO, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY).

Challenge

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).

Sumber Referensi

Bagikan: