PHP错误日志和换行符

时间:2009-07-29 23:36:27

标签: php apache debugging

什么是PHP配置设置允许或阻止调试输出中的换行符被转义?

在两个不同的安装(运行MAMP / OSX的开发笔记本电脑和运行debian的开发服务器)上,我在调试时会在错误日志中看到不同的结果。

error_log(print_r(array(1,2,4),1));

在Debian上,它在/var/log/apache2/error.log中显示为

[Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n    [0] => 1\n    [1] => 2\n    [2] => 4\n)\n, referer: http://dev.example.org/

在OSX上,它在/ Applications / MAMP / logs / php_error_log中显示为

[30-Jul-2009 11:34:00] Array
(
    [0] => 1
    [1] => 2
    [2] => 4
)

我更喜欢使用MAMP方式进行调试(除了将日志文件重定位到/ Applications目录之外)。

谢谢!

3 个答案:

答案 0 :(得分:14)

Chris,您应该能够在Debian上的php.ini中更改error_log指令以指向文件。如果这是未定义的,它将通过不支持多行的syslog。

详细信息:

error_log功能

error_log指令

答案 1 :(得分:2)

当Apache进程无法写入error_log文件时,会导致该问题,因此syslog会写入该文件。系统日志会破坏换行符。

所以就这样做:

chmod 777 error.log

这可以解决您的问题。

答案 2 :(得分:-2)

我为此提出了一个很好的解决方案,并且只是在博客上发表文章,可能对人们很有帮助:http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/。 TL; DR:写入您在/ tmp中创建的文件,编写一个将调试信息写入该文件的函数,并将Apache的日志记录路由到那里(这样您就不必跟踪2个错误文件)。