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

Gor*_*rep 224 php error-handling

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

Ama*_*man 345

使用以下代码:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
Run Code Online (Sandbox Code Playgroud)

然后看文件:

tail -f /tmp/php-error.log
Run Code Online (Sandbox Code Playgroud)

或更新php.ini在描述此博客条目从2008年.

  • `ini_set`只有在执行该代码时才有效.对于具有*解析错误*的代码没有用,因为在执行代码之前错误将是*.而是将这些更改写入php.ini. (40认同)
  • 如果你不能编辑php.ini,你应该能够在.htaccess中添加它:`php_flag log_errors on php_value error_log/home/path/public_html/domain/PHP_errors.log`.见http://perishablepress.com/how-to-enable-php-error-logging-via-htaccess/ (9认同)

Gor*_*don 90

看到

error_log("You messed up!", 3, "/var/tmp/my-errors.log");
Run Code Online (Sandbox Code Playgroud)

您可以使用自己的错误处理程序自定义错误处理,以便在出现错误或警告或需要记录的任何内容时为您调用此函数.有关其他信息,请参阅PHP手册中的错误处理

  • 但如果出现致命错误,PHP 将无法记录任何内容。 (2认同)

You*_*oub 34

只需将这些代码放在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
Run Code Online (Sandbox Code Playgroud)

  • 仅在您*还**希望所有错误都显示在输出和/或浏览器中,以及*除了日志记录之外。绝对不要在实时生产服务器上打开“ display_errors”-该指令专门用于输出给用户,并且对日志记录没有影响。http://www.php.net/manual/zh-CN/errorfunc.configuration.php#ini.display_errors (2认同)

T.T*_*dua 20

.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>
Run Code Online (Sandbox Code Playgroud)

ps这适用于Apache类型的服务器.

  • 但是,这与Apache的PHP模块非常相关. (7认同)

Jue*_*gen 7

这是我个人的短期功能

# 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);
}
Run Code Online (Sandbox Code Playgroud)


Frx*_*rem 6

看一下log_errorsphp.ini 中的配置选项.它似乎只是你想要的.我想你也可以使用该error_log选项设置自己的日志文件.

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

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

  • 因为不需要在生产服务器上向公众输出错误的内容,特别是如果错误的文本被谨慎地记录到文件中. (5认同)
  • 应始终在生产服务器上禁用显示错误.如果错误日志记录配置到其他位置,则不会,但始终如此.默认情况下,错误会记录到apache错误日志中,这通常就足够了. (3认同)
  • 显示生产错误使 PHP 更受欢迎:) (2认同)