如何让 cURL 错误进入正确的日志文件?

如何让 cURL 错误进入正确的日志文件?

我有一个使用 Apache 2.2.22、PHP 5.3.10 和 cURL 7.2.00 运行的网站。Apache 配置的相关部分如下,您会注意到错误被发送到www.example.com_error.log

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    # *snip*

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

但是,当我在 PHP 中使用 cURL 并启用详细日志记录时,curl_setopt($connection, CURLOPT_VERBOSE, true);cURL 的输出会进入 Apache 的error.log日志文件,而不是我上面定义的自定义日志文件。为什么会这样?我如何才能让 cURL 的输出进入正确的日志文件?

答案1

根据对此的一些回答那么问题来了,正如您已经注意到的,php 会记录到默认 Apache 服务器日志 (error.log)。您可以像这样设置 php 日志设置:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    # *snip*

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log ${APACHE_LOG_DIR}/php.error.log
</VirtualHost>

或者,该SO问题中的一个答案提到error_log在php.ini中完全取消设置指令以记录到相关虚拟主机的日志中,例如example.com_error.log

答案2

根据curl 文档, 您可以使用 CURLOPT_STDERR 设置日志文件位置。

请参阅此处的完整示例回答

相关内容