我已经将 Subversion 安装为 Apache 模块,并且设置完毕,运行正常。唯一的问题是,所有 SVN 内容(例如 PROPFIND、OPTIONS 等)都记录到与普通 Web 访问相同的 .LOG 文件中。我正在尝试弄清楚如何让 SVN 模块报告到自定义日志文件。
这是我的 Apache conf 文件中加载 SVN 模块的部分。我尝试使用 CustomLog 指令(如下图所示)执行此操作,但没有成功。
################################################
#Subversion modules
LoadModule dav_svn_module "C:/SVN/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/SVN/bin/mod_authz_svn.so"
# Configure Subversion repository
# This configures Apache so that all your Subversion repositories
# are available at http://myserver/svn/[repositoryName]
# The access is restricted to known users/passwords.
<Location /svn/>
DAV svn
SVNIndexXSLT "/svnindex.xsl"
SVNParentPath "C:/SVNRep/Repository/"
SVNListParentPath on
# SVNPath "C:/SVNRep/Repository/" #for single repository
SVNPathAuthz off
# SVNMasterURI http://localhost/svn/ #for write-through proxying
AuthType Basic
AuthName "My Subversion repositories"
AuthUserFile "C:/SVNRep/passwd"
Require valid-user
AuthzSVNAccessFile "C:/SVNRep/acl"
</Location>
CustomLog "C:/Logs/Apache/SVN.log" "%t %u %{SVN-ACTION}e" env=SVN-ACTION
################################################
有任何想法吗?
谢谢很多。
答案1
除了日志路径从 *nix 到 Windows 不同之外,您所拥有的正是我所配置的,并且可以在各种服务器上运行 - 可能是 SVN-ACTION 没有进入 Windows 上的环境?作为解决方法,您可以尝试:
SetEnvIf Request_URI "^/svn/*" mysvn
CustomLog "C:/Logs/Apache/SVN.log" combined env=mysvn
这显然不如记录 %{SVN-ACTION}e 那么友好,但它会将所有对 /svn 的请求拆分到它们自己的日志中。
答案2
好吧,我终于搞明白了。经过大量搜索(发现还有其他几个人问了同样的问题,但没有我预期的那么多),我偶然想出了解决方案。在看节目的时候,在广告期间,我开始思考如何才能将 Subversion 与 Web 服务器完全隔离(就像在单独的服务器中一样)。然后我想知道为什么 Subversion 条目会充斥 Web 服务器日志,而我的其他 VirtualHosts 却没有(它们根据需要使用自己的日志)。然后我突然想到:我在主 Web 服务器中设置了 SVN,而不是虚拟主机!所以这就是答案。
要让 Subversion 记录到它自己的 LOG 文件中,而不是淹没主 Apache 日志文件,只需将 SVN 指令(例如 Location...)放入其自己的专用虚拟主机中。
这样,我就可以用 SVN 客户端连接到 SVN 虚拟主机,也可以连接到网络服务器和网页浏览器。呃。:)非常简单;没有黑客,没有变通方法,什么都没有。奇怪的是,为什么在很多例子中似乎都没有将 SVN 位置放在虚拟主机中——我只在一!在几十个例子中。
(当然,如果您尝试使用 SVN 客户端连接主日志文件,它仍然会获取 OPTIONS、PROPFIND 等条目,但这是正确的行为。)
以下是一个例子:
<VirtualHost 127.200.200.200:80>
<Directory "C:/Subversion/Repositories/">
Options Indexes Includes
Order Deny,Allow
Allow from all
</Directory>
ServerName svn
ServerAdmin [email protected]
DocumentRoot "C:/Subversion/Repositories/"
ErrorLog "C:/Logs/SVN/error.log"
CustomLog "C:/Logs/SVN/access.log" common
CustomLog "C:/Logs/SVN/referer.log" referer
CustomLog "C:/Logs/SVN/agent.log" agent
LoadModule dav_svn_module "C:/SVN/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/SVN/bin/mod_authz_svn.so"
<Location /svn/>
DAV svn
SVNParentPath "C:/Subversion/"
SVNListParentPath on
SVNPathAuthz off
AuthType Basic
AuthName "My Subversion Repositories"
AuthUserFile "C:/Subversion/passwd"
Require valid-user
AuthzSVNAccessFile "C:/Subversion/acl"
</Location>
</VirtualHost>
就是这样。现在我想知道我是否可以找到那些问这个问题的人……