我具有记录消息的功能
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 );
}
感谢您的帮助
答案 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()
功能。那应该可以解决您的问题。