php länge - Wie protokolliert man Fehler und Warnungen in einer Datei?




meta description (7)

Wie man alle Fehler und Warnungen einschaltet und sie in eine Datei schreibt, aber alles innerhalb des Skripts einrichtet (nichts in der php.ini ändert). Ich möchte einen Dateinamen definieren und damit alle Fehler und Warnungen eingeloggt werden.


Answers

Füge diesen Code in .htaccess hinzu (wenn du keinen Zugriff auf php.ini hast )

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

PS ist dies für Apache-Server.


Das ist meine persönliche Kurzfunktion

# 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);
}

Schreiben Sie diese Codes einfach in Ihre PHP / Index-Datei:

error_reporting(E_ALL); // Error engine - always ON!

ini_set('display_errors', TRUE); // Error display - OFF in production env or real server

ini_set('log_errors', TRUE); // Error logging

ini_set('error_log', 'your/path/to/errors.log'); // Logging file

ini_set('log_errors_max_len', 1024); // Logging file size

Sehen Sie sich die Konfigurationsoption log_errors in der php.ini an. Es scheint genau das zu tun, was du willst. Ich denke, dass Sie die error_log Option verwenden können, um Ihre eigene Protokollierungsdatei auch zu setzen.

Wenn die Anweisung log_errors auf On , werden alle von PHP gemeldeten Fehler im Serverprotokoll oder in der mit error_log angegebenen Datei error_log . Sie können diese Optionen bei ini_set auch mit ini_set .

(Bitte beachten Sie, dass display_errors in der php.ini display_errors sollte, wenn diese Option aktiviert ist)



Verwenden Sie den folgenden Code:

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

Dann schau dir die Datei an:

tail -f /tmp/php-error.log

Oder update php.ini wie in diesem Blogeintrag von 2008 beschrieben.


Schwerwiegender Fehler: Kann den Funktionsrückgabewert im Schreibkontext nicht verwenden

Dies geschieht normalerweise, wenn eine Funktion direkt mit empty .

Beispiel:

if (empty(is_null(null))) {
  echo 'empty';
}

Dies liegt daran, dass empty ein Sprachkonstrukt und keine Funktion ist, es kann nicht mit einem Ausdruck als Argument in PHP-Versionen vor 5.5 aufgerufen werden. Vor PHP 5.5 muss das Argument für empty() eine Variable sein , aber ein beliebiger Ausdruck (z. B. der Rückgabewert einer Funktion) ist in PHP 5.5+ zulässig.

empty , trotz seines Namens, prüft nicht wirklich, ob eine Variable "leer" ist. Stattdessen wird überprüft, ob eine Variable nicht existiert, oder == false . Ausdrücke (wie is_null(null) in dem Beispiel) werden immer als vorhanden betrachtet, so dass hier empty nur geprüft wird, ob es gleich falsch ist. Du könntest empty() hier mit ersetzen ! zB if (!is_null(null)) oder explizit mit false vergleichen, zB if (is_null(null) == false) .

Verwandte Fragen:





php error-handling