Apache服务器 - 多个目录,不同的错误日志

时间:2012-05-01 07:54:26

标签: apache2 error-log

我在/ var / www中有两个目录(例如/ var / www / app1和/ var / www / app2),我想将错误日志发送到不同的文件。两者都属于同一个域,因此我认为我不能将它们放在不同的虚拟主机下。因此,举例来说,我会将它们视为:

http://localhost/app1

http://localhost/app2

我看到了这个页面:

Generate access logs for different subdirectories in Apache

其解决方案适用于访问日志。但是,“env”参数似乎不适用于ErrorLog指令。

在此“发现”之前,我正在研究这个问题,这似乎是错误的:

<VirtualHost *:80>
  ServerAdmin ray@localhost

  DocumentRoot /var/www/app1

  <Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order deny,allow
    allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/app1/error.log

  LogLevel warn

  CustomLog ${APACHE_LOG_DIR}/app1/access.log combined
</VirtualHost>

我对自己应该做的事情感到有些迷茫。也就是说,如果有一些方法可以使ErrorLog工作,或者我应该继续尝试为每个目录配置虚拟主机。任何帮助,将不胜感激!谢谢!

3 个答案:

答案 0 :(得分:8)

为什么在Directory上下文中为/设置VirtualHost个选项?使用<Directory /var/www/app1>代替<Directory />

由于Apache ErrorLog directive docs的上下文为server config, virtual host - 这意味着只能为整个服务器或VirtalHost定义ErrorLog,而不是Directory 。因此,如果要将不同的日志发送到不同的文件,请尝试使用SetEnvIf设置Env变量。取决于您所在的目录,它应该类似于SetEnvIf Request_URI ^\/a1\/ a1SetEnvIf Request_URI ^\/a2\/ !a1。然后根据a1环境变量写入日志。

答案 1 :(得分:1)

最后我做了,首先为每个文件夹创建内部子域,并使用proxypass传递子域内容。

启用apache mods:

a2enmod authz_core dir proxy proxy_http

<强>的/ etc /主机

127.0.0.1       localhost
127.0.0.1       a.localhost
127.0.0.1       b.localhost

<强> /etc/apache2/sites-available/default.conf

<VirtualHost *:80>
        ServerName localhost
        ServerAdmin fake@mail.com
        DocumentRoot "/dev/null"

        ProxyPass /a http://a.localhost/
        ProxyPassReverse /a http://a.localhost/
        ProxyPass /b http://b.localhost/
        ProxyPassReverse /b http://b.localhost/

        LogLevel debug

        ErrorLog ${APACHE_LOG_DIR}/default-error.log
        CustomLog ${APACHE_LOG_DIR}/default-access.log combined

</VirtualHost>

<强> /etc/apache2/sites-available/a.conf

<VirtualHost *:80>
        ServerName a.localhost
        ServerAdmin fake@mail.com
        DocumentRoot "/Publikoa/a"

        <Directory "/Publikoa/a">
                DirectoryIndex index.html
                Require all granted
        </Directory>

        LogLevel debug

        ErrorLog ${APACHE_LOG_DIR}/a-error.log
        CustomLog ${APACHE_LOG_DIR}/a-access.log combined

</VirtualHost>

<强> /etc/apache2/sites-available/b.conf

<VirtualHost *:80>
        ServerName b.localhost
        ServerAdmin fake@mail.com
        DocumentRoot "/Publikoa/b"

        <Directory "Publikoa/b">
                DirectoryIndex index.html
                Require all granted
        </Directory>

        LogLevel debug

        ErrorLog ${APACHE_LOG_DIR}/b-error.log
        CustomLog ${APACHE_LOG_DIR}/b-access.log combined

</VirtualHost>

启用网站:

a2ensite default a b

重启apache:

/etc/init.d/apache2 restart

答案 2 :(得分:0)

为每个目录设置自定义ID,您可以按以下目录将日志分开:

<Directory app1>
    SetEnv app1
</Directory>
<Directory app2>
    SetEnv app2
</Directory>
CustomLog ${APACHE_LOG_DIR}/site1.log combined env=subwebsite1
CustomLog ${APACHE_LOG_DIR}/site2.log combined env=subwebsite2