Cum se înregistrează erorile și avertismentele într-un fișier? (Programare, Php, Gestionarea Erorilor)

Gorep a intrebat.

Cum activez toate erorile și avertismentele și le înregistrez într-un fișier, dar să setez toate astea în cadrul scriptului (fără a schimba nimic în php.ini)?

Vreau să definesc un nume de fișier și astfel încât toate erorile și avertismentele să fie logate în el.

7 răspunsuri
Aman

Folosiți următorul cod:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

Apoi urmăriți fișierul:

tail -f /tmp/php-error.log

Sau actualizați php.ini așa cum este descris în această intrare pe blog din 2008.

Comentarii

    42

  • ini_set funcționează numai dacă acest cod este executat. Nu este util pentru codul care are erori de analiză deoarece eroarea va fi înainte de codul să fie executat. În schimb, scrieți aceste modificări în php.ini. –  > Por hakre.
  • Dacă nu puteți edita php.ini, ar trebui să puteți adăuga acest lucru în .htaccess : php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log. Vedeți perishablepress.com/… –  > Por Matthieu.
  • Am o întrebare, cum să fac ca fișierul error.log să fie creat în folderul meu htdocs în loc de acesta? –  > Por Tommy.
  • Cred că trebuie doar să schimbi dosarul din tmp/php-error.log în locația pe care o doriți? –  > Por Luke.
  • Acest lucru îmi blochează PHP în 5.4.0 –  > Por Ben Leggiero.
Gordon

Consultați

  • error_log – Trimiteți un mesaj de eroare undeva

Exemplu

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

Puteți personalizați gestionarea erorilor cu gestionarii de erori proprii care să apeleze această funcție pentru dvs. ori de câte ori apare o eroare, un avertisment sau orice altceva trebuie să înregistrați.Pentru informații suplimentare, consultați capitolul Gestionarea erorilor din Manualul PHP

Yousha Aleayoub

Pur și simplu puneți aceste coduri în partea de sus a fișierului dvs. PHP/index:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

Comentarii

  • Asta numai dacă de asemenea, doriți ca toate erorile să fie afișate în ieșire și/sau în browser, în plus la logare. display_errors nu ar trebui să fie NICIODATĂ activată pe un server de producție live – această directivă este destinată în mod special ieșirii către utilizator și nu are niciun efect asupra jurnalizării. php.net/manual/en/… –  > Por Aaron Wallentine.
T.Todua

adăugați acest cod în .htaccess (ca o alternativă a php.ini / ini_set ):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

* așa cum a fost comentat: aceasta este pentru Apache-și nu pentru serverele de tip Nginx sau altele.

Comentarii

  • Cu toate acestea, acest lucru este foarte specific pentru modulul PHP al Apache. –  > Por Peter Clotworthy.
Juergen

Aceasta este funcția mea personală scurtă

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."t[".$level."]t[".basename(__FILE__)."]t".$text."
", 3, $file);
}

Frxstrem

Aruncați o privire la log_errors din php.ini. Se pare că face exact ceea ce vrei să faci tu. Cred că poți folosi opțiunea error_log opțiunea pentru a seta propriul fișier de logare.

Atunci când se va deschide fișierul log_errors este setată la On, , orice eroare raportată de PHP ar fi înregistrată în jurnalul serverului sau în fișierul specificat cu error_log. Puteți seta aceste opțiuni cu ini_set de asemenea, dacă este necesar.

(Vă rugăm să rețineți că display_errors ar trebui să fie dezactivat în php.ini dacă această opțiune este activată)

Comentarii

  • De ce ar trebui să display_errors să fie dezactivat dacă activați log_errors? Nu are sens în opinia mea. 🙂 –  > Por Guido Hendriks.
  • Pentru că nu este nevoie să se afișeze conținutul erorilor în public pe un server de producție, mai ales dacă textul erorii este înregistrat discret într-un fișier. –  > Por Shabbyrobe.
  • Afișarea erorilor ar trebui să fie întotdeauna dezactivată pe serverul de producție. Nu dacă logarea erorilor este configurată în altă parte, ci întotdeauna. Erorile sunt înregistrate în jurnalul de erori apache în mod implicit, care este suficient de des. –  > Por Pihhan.
  • Afișarea erorilor în producție face PHP mai popular 🙂 –  > Por PeterM.
Stéphane

În plus, aveți nevoie de directiva „AllowOverride Options” pentru ca acest lucru să funcționeze. (Apache 2.2.15)