9

私はこのPHPコードを持っています:

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

これにより、apache error_log にすべてのメッセージを含む 1 行が生成されます。

[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.

私の質問: メッセージが同じ行にあるのはなぜですか? メッセージごとに 1 行にする方法は?

回答ありがとうございます。

編集

メッセージごとに 1 行は次のようになります。

[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'
4

2 に答える 2

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

PHP は、一重引用符内の特殊な ASCII 文字を無視します (別の文字としてレンダリングします)。二重引用符を使用する必要があります。

さらに、/etc/php5/apache2/ フォルダーにある php.ini ファイルを開き、ファイル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
  }

}
于 2013-11-14T08:47:40.820 に答える
0

ユーザー \r\n

error_log("my message 1\r\n");
....
error_log("my message 2\r\n");
...
error_log("my message 3\r\n");
于 2013-11-13T16:50:41.587 に答える