2012-05-01 53 views
5

我在/ var/www(比如/ var/www/app1和/ var/www/app2)中有兩個目錄,我想將它們的錯誤日誌發送到不同的文件。兩者都在同一個域中,所以我認爲我不能把它們放在不同的虛擬主機下。因此,舉例來說,我會訪問它們爲:Apache服務器 - 多個目錄,不同的錯誤日誌

http://localhost/app1

http://localhost/app2

我遇到了這個頁面:

Generate access logs for different subdirectories in Apache

,其解決方案完全適用於訪問日誌。但是,「env」參數似乎不適用於ErrorLog指令。

這個「發現」之前,我在做這一點,這似乎是錯誤的:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    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正常工作,或者我應該繼續嘗試爲每個目錄配置虛擬主機。任何幫助,將不勝感激!謝謝!

回答

8

爲什麼在VirtualHost上下文中爲/選擇Directory?使用的<Directory /var/www/app1>代替<Directory />

由於Apache ErrorLog directive docs其背景是server config, virtual host - 這意味着它是唯一可以定義錯誤日誌整個服務器或爲VirtalHost,不是爲Directory。因此,如果要將不同的日誌發送到不同的文件,請嘗試使用SetEnvIf來設置Env變量。根據你所在的目錄,它應該是SetEnvIf Request_URI ^\/a1\/ a1SetEnvIf Request_URI ^\/a2\/ !a1。然後根據a1環境變量寫入日誌。

+0

感謝您糾正我的「目錄」錯誤!至於ErrorLog,我確實瞭解了環境如何分離出訪問日誌。但它似乎不適用於錯誤日誌。我的理解是否正確? (當我嘗試的時候,在Apache解析配置文件的時候出現錯誤。)我想你是對的 - 錯誤日誌是針對整個服務器或虛擬主機的。根據您發送的鏈接,我想另一種選擇是將每個錯誤日誌條目傳遞給腳本......非常感謝您的幫助! – Ray

+1

是的,我也搜索過,似乎ErrorLog文件不能用SetEnvIf分隔。不用謝。 –