我正在尝试使用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。
答案 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
我找到的问题有两种解决方法,基本上相同。我在这里记录,因为它们有不同的优点和缺点。
如果您在配置文件中设置CustomLog
指令,请将其删除。
将CustomLog
指令添加到您网站的VirtualHost
条目中。对我来说这是在/etc/apache2/sites-available/default-ssl
,因为我只允许SSL访问Subversion存储库。如果您使用的是/etc/apache2/sites-available/default
,则需要编辑该文件(如果您同时使用这两个文件,则需要另外编辑default-ssl
。)
重启Apache:
sudo /etc/init.d/apache2 restart
<强>临强>
您的网站的CustomLog
条目中可以有多个VirtualHost
指令,它们都可以正常运行。
<强> N 强>
您必须将CustomLog
条目移到您网站的VirtualHost
条目中,而不是将其放在单独的配置文件中。
在您网站的CustomLog
条目中注释掉VirtualHost
指令。如果您使用的是默认网站配置之一(default
或default-ssl
),那么您需要注释掉访问日志的CustomLog
指令(是的,这个关闭Apache的默认访问日志记录)。
将CustomLog
指令添加到相应的配置文件中。对我而言,这是/etc/apache2/mods-available/dav_svn.conf
。
重启Apache:
sudo /etc/init.d/apache2 restart
<强>临强>
您可以将CustomLog
指令保存在单独的配置文件中。
<强> N 强>
这种解决方法有一个明显的缺点,你必须禁用Apache的默认访问日志记录,但对我来说,我并不在乎,因为我只使用服务器进行Subversion访问。
这些变通办法都不是很理想,但到目前为止,除了上面的两个变通办法之外,我还没有办法让它发挥作用。我想我们必须等待Apache的下一个版本才能解决这个问题。
答案 1 :(得分:0)
您可能会遇到的一个问题是,如果您通过重写规则将http请求重定向到https,则对于同一个VirtualHost,可能有两个不同的配置文件,一个服务*:80,另一个服务*:443
因此,请检查您是否没有仅在提供http的VirtualHost配置文件中编写CustomLog指令!
(是的,这确实发生在我身上)