为什么我不能让Apache的CustomLog指令工作?

时间:2009-02-08 02:52:06

标签: apache logging ubuntu

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

2 个答案:

答案 0 :(得分:13)

我遇到与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

  1. 如果您在配置文件中设置CustomLog指令,请将其删除。

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

  3. 重启Apache:

  4. sudo /etc/init.d/apache2 restart

    <强>临

    您的网站的CustomLog条目中可以有多个VirtualHost指令,它们都可以正常运行。

    <强> N

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

    解决方法2

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

    2. CustomLog指令添加到相应的配置文件中。对我而言,这是/etc/apache2/mods-available/dav_svn.conf

    3. 重启Apache:

    4. sudo /etc/init.d/apache2 restart

      <强>临

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

      <强> N

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

      结论

      这些变通办法都不是很理想,但到目前为止,除了上面的两个变通办法之外,我还没有办法让它发挥作用。我想我们必须等待Apache的下一个版本才能解决这个问题。

答案 1 :(得分:0)

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

因此,请检查您是否没有仅在提供http的VirtualHost配置文件中编写CustomLog指令!

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