获取 Subversion Apache 模块以使用 CustomLog

获取 Subversion Apache 模块以使用 CustomLog

我已经将 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>

就是这样。现在我想知道我是否可以找到那些问这个问题的人……

相关内容