Hataları ve uyarıları bir dosyaya nasıl kaydederim?


233

Tüm hata ve uyarıları nasıl açarım ve bunları bir dosyaya nasıl kaydederim, ancak bunların tümünü kod içinde ayarlamak için (php.ini içindeki hiçbir şeyi değiştirmiyorum)?

Bir dosya adı tanımlamak istiyorum ve böylece tüm hatalar ve uyarılar bu dosyaya giriş yapıyor.

Yanıtlar:


358

Aşağıdaki kodu kullanın:

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

Ardından dosyayı izleyin:

tail -f /tmp/php-error.log

Veya 2008'deki bu blog girişindephp.ini açıklandığı şekilde güncelleyin .


41
ini_setyalnızca bu kod yürütüldüğünde çalışır. Ayrıştırma hataları olan kod için yararlı değildir çünkü hata kod yürütülmeden önce olacaktır . Bunun yerine php.ini dosyasına bu değişiklikleri yazın.
hakre

9
Php.ini dosyasını düzenleyemiyorsanız, bunu .htaccess: dosyasına ekleyebilmeniz gerekir php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log. Bkz perishablepress.com/…
Matthieu

1
Bir sorum var, bunun yerine benim htdocs klasöründe oluşturmak için error.log dosyasını nasıl alabilirim?
Tommy

Sanırım klasörü tmp/php-error.logistediğiniz herhangi bir konuma değiştirdiniz mi?
Luke

Bu PHP benim 5.4.0 çöküyor
Supuhstar


42

Bu kodları PHP / index dosyanızın üstüne koymanız yeterlidir:

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

4
Eğer varsa bu sadece ayrıca tüm hataları ve / veya tarayıcıya çıktı görüntülenmesini istediğiniz ek olarak tomrukçulukla. display_errorsASLA canlı bir prodüksiyon sunucusunda açılmamalıdır - bu direktif özellikle kullanıcıya çıktı içindir ve günlük kaydı üzerinde hiçbir etkisi yoktur. php.net/manual/tr/…
Aaron Wallentine

22

bu kodu .htaccess dosyasına ekleyin ( php.ini / ini_set işlevine alternatif olarak ):

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

* yorumlandığı gibi: bu, Apache tipi sunucular içindir, Nginx veya diğerleri için değildir .


7
Ancak bu özellikle Apache'nin PHP modülü ile ilgilidir.
SacredSkull

9

Bu benim kişisel kısa fonksiyonum

# 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."\n", 3, $file);
}

6

log_errorsPhp.ini dosyasındaki yapılandırma seçeneğine bir göz atın . Sadece istediğinizi yapıyor gibi görünüyor. Bence sen-ebilmek kullanmaerror_log kendi günlük dosyası ayarlamak için seçeneği .

Ne zaman log_errorsdirektif olarak ayarlanır On, PHP tarafından bildirilen herhangi bir hata sunucu günlüğüne veya belirtilen dosyaya kaydedilir olacaktır error_log. Bu seçenekleri aşağıdakilerle ayarlayabilirsiniz:ini_setGerekirse .

( display_errorsBu seçenek etkinleştirilirse php.ini dosyasında devre dışı bırakılması gerektiğini lütfen unutmayın )


1
display_errorsEtkinleştirdiyseniz neden devre dışı bırakılmalıdır log_errors? Bence mantıklı değil. :)
Guido Hendriks

5
Özellikle hata metni bir dosyaya gizli bir şekilde giriş yapılıyorsa, hataların içeriğini bir üretim sunucusunda herkese çıkarmaya gerek olmadığından.
Shabbyrobe

3
Görüntü hataları üretim sunucusunda her zaman devre dışı bırakılmalıdır. Hata günlüğü başka bir yere yapılandırılmışsa değil, her zaman. Hatalar varsayılan olarak apache hata günlüğüne kaydedilir, bu genellikle yeterlidir.
Pihhan

1
Üretimdeki hataları görüntülemek PHP'yi daha popüler hale getirir :)
PeterM

0

Ayrıca, bunun çalışması için "AllowOverride Options" yönergesine ihtiyacınız vardır. (Apache 2.2.15)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.