我正在尝试使用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。

最佳答案

我对Ubuntu 9.10 Server和Apache 2.2.12有相同的问题。我正在使用mod_dav_svn设置Subversion服务器,并在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
  • (如果已在单独的配置文件中进行设置),请从配置文件中删除CustomLog伪指令。
  • CustomLog指令添加到站点的VirtualHost条目中。对我来说,这是在/etc/apache2/sites-available/default-ssl中,因为我只允许对Subversion存储库的SSL访问。如果您使用的是/etc/apache2/sites-available/default,那么您将要编辑该文件(或者如果同时使用default-ssl,则要编辑该文件)。
  • 重新启动Apache:
  • sudo /etc/init.d/apache2 restart
    专业版

    您可以在站点的CustomLog条目中具有多个VirtualHost伪指令,它们将全部起作用。

    Con

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

    解决方法2
  • 在站点的CustomLog条目中注释掉VirtualHost指令。如果您使用默认站点配置之一(defaultdefault-ssl),则将需要注释掉访问日志的CustomLog指令(是的,这将关闭Apache的默认访问日志记录)。
  • CustomLog指令添加到适当的配置文件中。对我来说,这是/etc/apache2/mods-available/dav_svn.conf
  • 重新启动Apache:
  • sudo /etc/init.d/apache2 restart
    专业版

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

    Con

    这种解决方法具有明显的缺点,即您必须禁用Apache的默认访问日志记录,但是对我而言,我并不在乎,因为我仅使用服务器进行Subversion访问。

    结论

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

    10-08 06:47