13

我正在尝试使用 Apache 的CustomLog指令来创建一些自定义日志文件,但无法使其正常工作。这是我用于自定义日志的配置:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog /var/log/apache2/jb_common common
CustomLog /var/log/apache2/jb_referer referer

Apache 在启动时会创建这两个自定义日志文件,因此它肯定会看到CustomLog指令,但它从不向这些文件写入任何内容;access.log但是,正在写入默认访问日志 ( )。

有任何想法吗?我在 Ubuntu 8.10 上运行 Apache 2.2。

4

2 回答 2

13

我对 Ubuntu 9.10 服务器和 Apache 2.2.12 有同样的问题。我正在设置一个 Subversion 服务器,mod_dav_svn并添加了一个CustomLog指令来/etc/apache2/mods-available/dav_svn.conf记录 Subversion 请求,但遇到了同样的问题(日志文件是在 Apache 启动时创建的,但从未写入):

<Location /svn>
  ...
</Location>

LogFormat "%t %u %{SVN-ACTION}e" svn_log
CustomLog /var/log/apache2/svn_access.log svn_log env=SVN-ACTION

我发现的问题有两种解决方法,它们基本上是同一件事。我在这里记录两者,因为它们有不同的优点和缺点。

解决方法 1

  1. CustomLog如果您在单独的配置文件中设置了该指令,请从配置文件中删除该指令。

  2. CustomLog将该指令添加到您网站的VirtualHost条目中。对我来说,这是/etc/apache2/sites-available/default-ssl因为我只允许 SSL 访问 Subversion 存储库。如果您正在使用/etc/apache2/sites-available/default,您将需要编辑该文件(或者default-ssl如果您同时使用这两个文件)。

  3. 重启阿帕奇:

sudo /etc/init.d/apache2 restart

您可以在站点的条目中包含多个CustomLog指令,它们都可以工作。VirtualHost

骗局

您必须将您的CustomLog条目移动到您站点的VirtualHost条目中,而不是将其放在单独的配置文件中。

解决方法 2

  1. 注释掉您网站条目CustomLog中的指令。VirtualHost如果您使用的是默认站点配置之一(defaultdefault-ssl),则会有一个CustomLog访问日志指令,您需要将其注释掉(是的,这会关闭 Apache 的默认访问日志)。

  2. 将您的CustomLog指令添加到适当的配置文件中。对我来说这是/etc/apache2/mods-available/dav_svn.conf.

  3. 重启阿帕奇:

sudo /etc/init.d/apache2 restart

您可以将CustomLog指令保存在单独的配置文件中。

骗局

这种解决方法有一个明显的缺点,即您必须禁用 Apache 的默认访问日志记录,但对我来说,我并不在意,因为我只使用服务器进行 Subversion 访问。

结论

这些解决方法都不是真正理想的,但到目前为止,除了上述两种解决方法之外,我还没有找到让它工作的方法。我想我们必须等待 Apache 的下一个版本才能解决这个问题。

于 2010-01-10T05:43:53.367 回答
0

您可能遇到的一个问题是,如果您通过重写规则将 http 请求重定向到 https,您可能对同一个 VirtualHost 有两个不同的配置文件,一个服务 *:80,另一个服务 *:443

所以也许检查你没有只在服务 http 的 VirtualHost 配置文件中编写 CustomLog 指令!

(是的,它确实发生在我身上)

于 2020-03-25T22:26:42.813 回答