将访问的“URL”添加到 Apache 错误日志

将访问的“URL”添加到 Apache 错误日志

我们收到“PHP 允许的内存已耗尽”的消息,其中 PHP 要求使用 GB 的内存。我该如何格式化 Apache 错误日志以查看它正在访问哪个 URL?

答案1

取自 debian apache2.conf 默认文件:

# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Apache 2 手册不同格式符号 % 或Apache 2 手册 ErrorlogFormat 指令从 apache 2.4 开始,错误日志也采用特定格式。

简而言之 :

在主配置文件中定义输出格式,并在 VirtualHost 指令中定义每个 vhost 的输出文件(例如)。如果您愿意,也可以在主文件中定义所有站点的配置文件。

需要添加类似的内容(如果尚未添加):

    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/error.log

根据您的具体设置,您可能需要稍微更改位置。

如果您的网站流量很大,请不要忘记对它们进行日志轮换。

通常这应该是(至少在 debian 中)我记得的默认设置。

如果您有空日志,您可能需要检查文件夹/文件的权限,以便 apache2 进程运行的用户可以访问和写入它们。

请记住,重新加载该过程(就我所知)需要重新读取配置文件。

答案2

接受的答案并未回答原始问题,因为它记录到access.log而不是error.log

您需要将 url 放在环境变量中,然后从 ErrorLogFormat 调用它,如下所示:

SetEnvIf Request_URI "(^.*$)" RURI=$1
ErrorLogFormat "%{cu}t %a %l %M URI:%{RURI}e"

答案3

这对我有用:

ErrorLogFormat "[%t] %{Request_URI}e (Referer: %{Referer}i) [client %a] [%l] %M"

当我为请求 URI 创建一个单独的变量时,如 @kofifus 和 @franfran 所示,我得到了 URL 重写后运行的底层脚本,但我想要用户在 Web 浏览器中看到的路径,这就是它给我的。

答案4

我遇到了同样的问题。当您查看错误日志并想知道哪个 URL 触发了它时。

  1. ErrorLogFormat 仅在 Apache 2.4 中可用

  2. 自定义日志和错误日志的日志标记不同,您不能简单地使用自定义日志标记并将其放入 ErrorLogFormat 中

    ErrorLogFormat 标记: https://httpd.apache.org/docs/2.4/mod/core.html#errorlogformat

    CustomLog 令牌: https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats

  3. 也许可以使用变量并将其放入 ErrorLogFormat,但就我自己的测试而言,我无法使其工作。

    例如
    SetEnvIf Request_URI "(^.*$)" RURI=$1
    设置环境变量 QUERY_STRING "(^.*$)" QSTRING=$1
    错误日志格式“%t [URI:%{RURI}e] [QSTRING:%{QSTRING}e] %M”
  1. 最后,事实证明“正确”的方法是使用令牌 LogID 并从 CustomLog 中引用它
    例如
    LogFormat“[LogID: %L] %t \” %r \” %h” 自定义 id
    错误日志格式“[日志ID: %L] %t %M”

希望能帮助到你

相关内容