我正在尝试使用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
,则要编辑该文件)。 sudo /etc/init.d/apache2 restart
专业版
您可以在站点的
CustomLog
条目中具有多个VirtualHost
伪指令,它们将全部起作用。Con
您必须将
CustomLog
条目移动到站点的VirtualHost
条目中,而不是将其保存在单独的配置文件中。解决方法2
CustomLog
条目中注释掉VirtualHost
指令。如果您使用默认站点配置之一(default
或default-ssl
),则将需要注释掉访问日志的CustomLog
指令(是的,这将关闭Apache的默认访问日志记录)。 CustomLog
指令添加到适当的配置文件中。对我来说,这是/etc/apache2/mods-available/dav_svn.conf
。 sudo /etc/init.d/apache2 restart
专业版
您可以将
CustomLog
指令保留在单独的配置文件中。Con
这种解决方法具有明显的缺点,即您必须禁用Apache的默认访问日志记录,但是对我而言,我并不在乎,因为我仅使用服务器进行Subversion访问。
结论
这些变通办法都不是真正理想的,但是到目前为止,除了上述两个变通办法之外,我还没有找到其他方法来使其工作。我想我们必须等待下一个Apache版本才能解决此问题。