error_log în PHP

Scrie un mesaj în jurnalul de erori al serverului sau într-un fișier ales de tine.

Sintaxă
error_log(string $message, int $message_type = 0, ?string $destination = null, ?string $additional_headers = null): bool

Ce face error_log

Cu tipul implicit (0), mesajul ajunge în jurnalul configurat prin setarea error_log din php.ini (de exemplu /var/log/php_errors.log), cu data și ora în față. Dacă setarea nu există, mesajul ajunge în jurnalul serverului web sau, în linia de comandă, pe ecran (stderr).

Cu tipul 3, mesajul se adaugă la sfârșitul fișierului dat în $destination, exact cum l-ai scris: fără dată și fără linie nouă automată. Tipul 1 trimite mesajul pe email, dar este rar folosit.

Parametri

Parametru Descriere
$message Mesajul de scris.
$message_type Opțional. 0 jurnalul PHP, 1 email, 3 adaugă într-un fișier, 4 jurnalul serverului web (SAPI).
$destination Opțional. Fișierul (la tipul 3) sau adresa de email (la tipul 1).
$additional_headers Opțional. Antete suplimentare pentru email (doar tipul 1).

Ce returnează

true la succes, false la eroare.

Exemple

Exemplul 1: Jurnal propriu, într-un fișier

<?php
function jurnal(string $mesaj): void
{
    error_log(date("Y-m-d") . " " . $mesaj . "\n", 3, "aplicatie.log");
}

jurnal("Utilizatorul ana@exemplu.ro s-a autentificat");
jurnal("Plata pentru comanda #1024 a eșuat");

echo file_get_contents("aplicatie.log");

Rezultat posibil (diferă la fiecare rulare)

2026-10-19 Utilizatorul ana@exemplu.ro s-a autentificat
2026-10-19 Plata pentru comanda #1024 a eșuat

Exemplul 2: Jurnalul PHP setat din cod

Cu tipul implicit, PHP adaugă singur data, ora și fusul orar.

<?php
ini_set("error_log", __DIR__ . "/php_errors.log");

error_log("Conexiunea la API-ul de curierat a expirat");

echo file_get_contents(__DIR__ . "/php_errors.log");

Rezultat posibil (diferă la fiecare rulare)

[19-Oct-2026 11:42:07 UTC] Conexiunea la API-ul de curierat a expirat

Exemplul 3: Excepție scrisă în jurnal

<?php
try {
    throw new RuntimeException("Fișierul de export nu poate fi scris");
} catch (RuntimeException $e) {
    error_log(get_class($e) . ": " . $e->getMessage() . " (linia " . $e->getLine() . ")\n", 3, "erori.log");
    echo "A apărut o problemă. Am notat-o.\n";
}

echo file_get_contents("erori.log");

Rezultat

A apărut o problemă. Am notat-o.
RuntimeException: Fișierul de export nu poate fi scris (linia 3)

Greșeli frecvente

  • La tipul 3 uiți \n la final. Toate mesajele ajung pe aceeași linie.
  • Scrii fișierul de jurnal într-un director public (de exemplu lângă index.php). Oricine îl poate descărca din browser. Pune-l în afara directorului public.

Comenzi înrudite

  • set_error_handler: Înlocuiește tratarea standard a avertismentelor și notificărilor PHP cu o funcție scrisă de tine.
  • set_exception_handler: Setează funcția care rulează când o excepție nu este prinsă de niciun bloc catch.
  • error_reporting: Setează ce tipuri de erori raportează PHP (sau doar citește setarea curentă).
  • file_put_contents: Scrie un text într-un fișier. Creează fișierul dacă nu există.