错误日志中同一行上的几条error_log()消息

时间:2013-11-13 16:45:40

标签: apache php

我有这个PHP代码:

error_log('my message 1');
....
error_log('my message 2');
...
error_log('my message 3');

这会在apache error_log中生成一行包含所有消息:

[Wed Nov 13 17:24:55.880399 2013] [proxy_fcgi:error] [pid xx] [client xxx] AH01071: Got error 'PHP message: my message 1\n'PHP message: my message 2\n'PHP message: my message 3

我的配置:

Apache 2.4
PHP : 5.4
PHP-FPM with proxypassmatch directive.

我的问题:为什么消息在同一行,以及如何为每条消息设置一行?

感谢您的回答。

修改

每封邮件的一行应如下所示:

[Wed Nov 13 17:24:55.880399 2013] [proxy_fcgi:error] [pid xx] [client xxx] AH01071: Got error 'PHP message: my message 1'
[Wed Nov 13 17:24:55.880399 2013] [proxy_fcgi:error] [pid xx] [client xxx] AH01071: Got error 'PHP message: my message 2'
[Wed Nov 13 17:24:55.880399 2013] [proxy_fcgi:error] [pid xx] [client xxx] AH01071: Got error 'PHP message: my message 3'

2 个答案:

答案 0 :(得分:1)

error_log("error message \r\n");

PHP忽略单引号内的特殊ASCII字符(它将其呈现为单独的字符),您需要使用双引号。

另外: 您应该打开您的php.ini文件,即/ etc / php5 / apache2 /文件夹中的文件,然后输入error_log指令以指向文件。

Apache必须具有足够的权限才能写入此文件。 所以 chown www-data:www-data /var/www/somefile.log 应该这样做

如果当前未定义,则日志将通过syslog,并且不允许新行。

其他编辑: 要渗透输出缓冲,您需要引发异常。

示例:

try{
  ob_start();
  doSomething($userInput);
  ob_end_flush();
}
catch(Exception $e){
 error_log($e->getMessage());
}

function doSomething($data = null){
  if($data === null){
    throw new Exception("Data is required");
  }
  else{
    //do something
  }

}

答案 1 :(得分:0)

用户\ r \ n

error_log("my message 1\r\n");
....
error_log("my message 2\r\n");
...
error_log("my message 3\r\n");