【问题标题】:Log GET requests and querystring in PHP (Apache)在 PHP (Apache) 中记录 GET 请求和查询字符串
【发布时间】:2019-05-29 04:51:08
【问题描述】:

我们有一个在 Apache 上运行的 PHP 应用程序,并希望记录所有 API 请求(GET + 参数)。

我看过这篇帖子Best way to log POST data in Apache?,上面写着“GET 请求会很简单,因为它们会在 apache 日志中”。

但是,当我查看我们的日志时,它们并不存在。我需要哪些服务器日志设置来记录 GET 请求 + 查询字符串?在https://httpd.apache.org/docs/2.4/logs.html中没有提到如何做到这一点

【问题讨论】:

  • 来自Apache Documentation -> Access log:“服务器访问日志记录了服务器处理的所有请求。”它明确包含一个记录 GET 请求的示例(第 8 段)也许您可以将那里解释的设置与您的设置进行比较,看看您的服务器是否记录传入的请求

标签: php apache api logging get


【解决方案1】:

GET 请求记录在访问日志文件中。阅读您提供的文档,尤其是Access Log 部分很重要。 您的 Apache 主机应配置如下:

LogLevel        info
ErrorLog        "/private/var/log/apache2/{hostname}-error.log"
CustomLog       "/private/var/log/apache2/{hostname}-access.log" combined

然后可以在/private/var/log/apache2/{hostname}-access.log中找到GET请求

为了调试目的,一种简单快捷的方法是编写一个记录 POST 数据的函数。

function logPost() {
    if (isset($_POST && !empty($_POST) {
        foreach($_POST as $key => $value) {
            error_log('=== _POST REQUEST ===');
            error_log('_POST: '.$key.' => '.$value);
        }
        // OR serialise the data but this is less readable
        error_log('=== _POST REQUEST ===');
        error_log(serialise($_POST));
    }
}

然后可以在/private/var/log/apache2/{hostname}-error.log中找到POST请求

【讨论】:

  • 为了清楚一点,你是用主机名替换 {hostname} 还是自动替换的变量。
  • 是的,手动将其替换为您的主机名,或者使用带有名称的 ENV 变量(如果有的话)
  • 为了清楚起见,我可能不得不重写问题 - 我正在寻找向另一台服务器发出的 GET 请求而不是在此服务器上的 GET 请求。这还能用吗?
  • 啊,在问题中更清楚一点会很好。 Apache 只能记录对它发出的请求,而不是来自它的请求。至少据我所知
  • 如果您在哪里查询自己的服务器http://host.example/index.php?query=test_api,这将由 Apache 记录。例如,如果您从 php header(...) 内部发出请求,则不会被记录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2016-05-04
相关资源
最近更新 更多