如何将错误和警告记录到文件中?

时间:2010-08-20 14:15:47

标签: php error-handling

如何打开所有错误和警告并将其记录到文件中,但要在脚本中设置所有这些(不要更改php.ini中的任何内容)。我想定义一个文件名,以便记录所有错误和警告。

7 个答案:

答案 0 :(得分:336)

使用以下代码:

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

然后观看文件:

tail -f /tmp/php-error.log

或更新php.ini,如2008年this blog entry中所述。

答案 1 :(得分:86)

实施例

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

每当出现错误或警告或您需要记录的任何内容时,您都可以customize error handling with your own error handlers为您调用此函数。 有关其他信息,请参阅Chapter Error Handling in the PHP Manual

答案 2 :(得分:30)

只需将这些代码放在PHP /索引文件的顶部:

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

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

ini_set('display_errors', TRUE); // Error display - FALSE only in production environment or real server

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

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

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

答案 3 :(得分:19)

.htaccess 中添加此代码(作为 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>

*评论:这适用于Apache类型的服务器。

答案 4 :(得分:6)

查看php.ini中的log_errors配置选项。它似乎只是你想要的。我认为您也可以使用error_log选项设置自己的日志文件。

log_errors指令设置为On时,PHP报告的任何错误都将记录到服务器日志或error_log指定的文件中。如果需要,您也可以使用ini_set设置这些选项。

(请注意,如果启用此选项,则应在php.ini中禁用display_errors

答案 5 :(得分:6)

这是我个人的短期功能

# 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 :(得分:0)

此外,您需要&#34; AllowOverride选项&#34;这项工作的指示。 (Apache 2.2.15)