2013-11-26 28 views
1

我有一個由多個域使用的PHP應用程序。爲了避免維護多個虛擬主機,我剛剛設置了一個「默認」Apache vhost來將任何傳入請求引導到服務器到應用程序目錄。基於主機名的動態apache日誌目錄

我想要做的是根據主機名命中服務器來動態設置Apache訪問和錯誤日​​志路徑。

例如,我想設置日誌路徑是這樣的:

/var/log/application_name/example.com/error.log 
/var/log/application_name/example.com/access.log 

example.com一個請求。

有沒有可行的方法來做到這一點?我已經看過使用任何Apache環境變量,但由於這些是在捕獲請求時設置的,所以我不認爲這些可用於ErrorLog或CustomLog指令。是否只需要在應用程序級別(即在PHP中)手動設置日誌目錄?

感謝

回答

3

我用這樣的設置,其中我logsplit.sh腳本寫入日誌文件的基礎在%U:

<VirtualHost *:80> 
    ServerName myserver.com 
    ServerAlias *.myserver.com 
    VirtualDocumentRoot /home/%1/www/ 
    LogFormat "%U %h %l %u %t \"%r\" %>s %b" common 
    CustomLog "|/usr/local/logsplit.sh" common 
</VirtualHost> 
+0

我不能這樣做:'的CustomLog 「/usr/local/%{HTTP_HOST}.log」 common'。或者至少將$ {HTTP_HOST}作爲參數傳遞給logsplit.sh,以便我可以通過主機進行分割? – James

+1

當然你可以這樣做:LogFormat「%{HTTP_HOST}%h%l%u%t \」%r \「%s%b」common很遺憾,你不能在日誌文件路徑中使用變量 –

-1

您可以只用ServerAlias保持1虛擬主機數域與VirtualHosts做到這一點:

<VirtualHost *:80> 
     ServerAdmin ... 
     ServerName domain1.bla.com 
     ServerAlias service.bla.com domain5.domain.xxx 
     DocumentRoot /www/vhosts/xxx/public 

     ErrorLog /www/vhosts/xxx/log/error.log 
     CustomLog /www/vhosts/ccc/log/access.log combined 
     LogLevel warn 

     <Directory "/www/vhosts/ccc/public"> 
       Options FollowSymLinks MultiViews 
       php_admin_flag safe_mode On 
       AllowOverride None 
       Order allow,deny 
       allow from all 
     </Directory> 
</VirtualHost> 
+0

還有一個日誌文件... –