如何使用MAMP 5.1启用常规PHP日志和apache请求日志

时间:2018-11-28 12:35:39

标签: php mamp-pro

我具有记录消息的功能

function messageError($logDataJson, $file = null){
$logDataJson = is_string($logDataJson) ? $logDataJson : json_encode($logDataJson);
$logDataJson .= PHP_EOL;
$fe = fopen('php://stderr', 'w');
fwrite($fe, $file . $logDataJson );

}

当我运行messageError(['shop'=>"1"]);时,我看到日志消息{"shop":"1"}

但是当我通过http请求运行脚本时,我没有在/Applications/MAMP/logs/php_error.log文件中看到该消息。

在我的php.ini中说 ;将错误记录到日志文件中(服务器特定的日志,stderr或error_log(如下)) ;如上所述,强烈建议您使用错误记录代替 ;在生产网站上显示错误。 log_errors = On

我想要的是将消息从messageError(['shop'=>"1"]);输出到/Applications/MAMP/logs/php_error.log文件,并将messageLoger(['shop'=>"1"]);输出到/Applications/MAMP/logs/php.log

function messageLoger($logDataJson, $file = null){
$logDataJson = is_string($logDataJson) ? $logDataJson : json_encode($logDataJson);
$logDataJson .= PHP_EOL;
$fe = fopen('php://stdout', 'w');
fwrite($fe, $file . $logDataJson );

}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

php://output允许直接访问PHP进程的相应输出流。要写入日志文件,请使用php://stderr

或者,您可以使用error_log函数。

在此处了解更多信息:https://secure.php.net/manual/en/wrappers.php.php

error_log函数:https://secure.php.net/manual/en/function.error-log.php


示例:

function log(...$vars): void 
{
     foreach($vars as $var) {
         error_log(sprintf('[LOG][%s] : %s', date('F j, Y, g:i a'), json_encode($var)));
     }
}

log('Hello');
log('a', 'b', 'c');
log([1,2,3]);

更新:

由于您已经在使用php://stderr,因此请检查php.ini文件并确保将error_log设置为日志文件。

示例: error_log = /path/to/apache/php/log.txt

如果要将错误记录到系统日志或Windows Server事件日志中,请使用syslog

示例: error_log = syslog

答案 1 :(得分:0)

启用error_reporting(1)并使用error_log()功能。那应该可以解决您的问题。