【问题标题】:Why can't I get Apache's CustomLog directive to work?为什么我不能让 Apache 的 CustomLog 指令工作?
【发布时间】:2010-10-06 05:16:39
【问题描述】:

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

【问题讨论】:

    标签: apache logging ubuntu


    【解决方案1】:

    我在 Ubuntu 9.10 服务器和 Apache 2.2.12 上遇到了同样的问题。我正在使用mod_dav_svn 设置一个Subversion 服务器,并向/etc/apache2/mods-available/dav_svn.conf 添加了一个CustomLog 指令来记录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:

    sudo /etc/init.d/apache2 restart

    专业版

    您可以在您的网站的 VirtualHost 条目中拥有多个 CustomLog 指令,它们都可以工作。

    骗局

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

    解决方法 2

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

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

    3. 重启 Apache:

    sudo /etc/init.d/apache2 restart

    专业版

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

    骗局

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

    结论

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

    【讨论】:

    • 您的解决方法 1 也对我有用。 RHEL 5.9、Subversion 1.6、Apache 2.2。谢谢!
    • 请注意,这完全是每个 apache 文档,httpd.apache.org/docs/2.2/logs.html#virtualhost“如果将 CustomLog 或 ErrorLog 指令放在 部分中,则该虚拟主机的所有请求或错误将仅记录到指定的文件。任何没有日志记录指令的虚拟主机仍会将其请求发送到主服务器日志。"
    • 当你说 "... 适当的配置文件。对我来说这是/etc/apache2/mods-available/dav_svn.conf",我希望你的意思是sites-available(或conf.d,甚至是现代的confs-available),不是 mods-available
    • 从 Apache 2.4.19 开始有一个 GlobalLog 指令:“GlobalLog 由定义自己的 CustomLog 的虚拟主机使用,与全局指定的 CustomLog 不同。”
    【解决方案2】:

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

    因此,请检查您是否仅在服务 http 的 VirtualHost 配置文件中编写了 CustomLog 指令!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多