Назад | Перейти на главную страницу

Получение модуля Subversion Apache для использования CustomLog

Я установил Subversion как модуль Apache, он настроен и отлично работает. Единственная проблема в том, что я получаю все данные SVN (например, PROPFIND, OPTIONS и т. Д.) В том же файле .LOG, что и при обычном доступе к сети. Я пытаюсь понять, как заставить модуль SVN сообщать в настраиваемый файл журнала.

Вот часть моего файла конфигурации Apache, который загружает модуль 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
################################################


Любые идеи?

Спасибо много.

Ну я разобрался. После долгих поисков (в результате которых было обнаружено, что несколько человек спрашивают то же самое, но не так много, как я ожидал), я пришел к решению по интуиции. Во время просмотра шоу во время рекламы я задумался о том, что нужно сделать, чтобы полностью отделить Subversion от веб-сервера (как и для отдельного сервера в целом). Затем я задумался, почему записи Subversion наводняли журналы веб-сервера, а другие мои VirtualHosts - нет (они использовали свои собственные журналы по желанию). Затем меня осенило: у меня на главном веб-сервере настроен SVN, а не виртуальный хост! Вот и ответ.

Чтобы Subversion записывала журнал в свой собственный файл журнала и не наводняла основной файл журнала Apache, просто поместите директивы SVN (например, Location…) в отдельный выделенный виртуальный хост.

Таким образом, я могу подключиться к виртуальному хосту SVN с помощью клиента SVN, а также к веб сервер с веб-браузер. Ага. :) Так просто; Никаких хаков, никаких обходных путей, ничего. Любопытно, почему размещение SVN-местоположения на виртуальном хосте не встречается во многих примерах - я видел это только один! из пары десятков примеров.

(Конечно, основные файлы журнала по-прежнему будут содержать записи OPTIONS, PROPFIND и т. Д., Если вы попытаетесь подключиться к нему с помощью клиента SVN, но это правильное поведение.)

Вот пример:

<VirtualHost 127.200.200.200:80>
    <Directory "C:/Subversion/Repositories/">
        Options Indexes Includes
        Order   Deny,Allow
        Allow   from all
    </Directory>

    ServerName   svn
    ServerAdmin  svn@blah.com
    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>

Вот и все. Теперь мне интересно, смогу ли я найти тех людей, которые задали этот вопрос ...

За исключением пути к журналу, отличного от * nix до Windows, у вас есть именно то, что я настроил и работает на разных серверах - возможно, SVN-ACTION не попадает в env в Windows? В качестве обходного пути вы можете попробовать:

SetEnvIf Request_URI "^/svn/*" mysvn
CustomLog "C:/Logs/Apache/SVN.log" combined env=mysvn

Очевидно, это будет не так удобно, как регистрация% {SVN-ACTION} e, но все запросы к / svn будут разделены в отдельный журнал.