2012-05-01 10 views
5

Ich habe zwei Verzeichnisse in/var/www (sagen wir/var/www/app1 und/var/www/app2), deren Fehlerprotokolle ich an verschiedene Dateien senden möchte. Beide sind unter der gleichen Domain, also denke ich , dass ich sie nicht unter verschiedenen virtuellen Hosts setzen kann. So zum Beispiel, ich würde sie als Zugang:Apache Server - mehrere Verzeichnisse, verschiedene Fehlerprotokolle

http://localhost/app1

http://localhost/app2

stieß ich auf dieser Seite:

Generate access logs for different subdirectories in Apache

deren Lösung funktioniert perfekt für die Zugriffsprotokolle. Das Argument "env" scheint jedoch nicht mit der ErrorLog-Anweisung zu funktionieren.

Vor dieser „Entdeckung“, ich wurde daran gearbeitet, das scheint falsch:

<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> 

ich etwas verloren, was ich tun sollte. Das heißt, wenn es einen Weg gibt, um ErrorLog zum Laufen zu bringen, oder wenn ich weiterhin versuchen sollte, einen virtuellen Host für jedes Verzeichnis zu konfigurieren. Jede Hilfe wäre willkommen! Vielen Dank!

Antwort

8

Warum setzen Sie Directory Optionen für / im VirtualHost Kontext? Verwenden Sie <Directory /var/www/app1> statt <Directory />

Aufgrund des Apache ErrorLog directive docs seines Kontextes ist server config, virtual host - was bedeutet, dass es nur möglich ist, ErrorLog für den gesamten Server zu definieren oder für ein VirtalHost, nicht für ein Directory. Wenn Sie also verschiedene Protokolle an verschiedene Dateien senden möchten, verwenden Sie SetEnvIf, um eine Env-Variable festzulegen. Abhängig von dem Verzeichnis, in dem Sie sich befinden, sollte es so etwas wie SetEnvIf Request_URI ^\/a1\/ a1 und SetEnvIf Request_URI ^\/a2\/ !a1 sein. Schreiben Sie dann Protokolle abhängig von der Umgebungsvariablen a1.

+0

Danke für die Korrektur meines "Directory" -Fehlers! Was das ErrorLog betrifft, habe ich herausgefunden, wie Umgebungen arbeiten, um das Zugriffsprotokoll zu trennen. Aber es scheint nicht für das Fehlerprotokoll zu funktionieren. Ist mein Verständnis richtig? (Wenn ich es versuche, erhalte ich einen Fehler, während Apache die Konfigurationsdatei analysiert.) Ich nehme an, Sie haben Recht - das Fehlerprotokoll ist für einen ganzen Server oder virtuellen Host. Basierend auf dem Link, den Sie gesendet haben, nehme ich an, dass eine andere Möglichkeit darin besteht, jeden Fehlerprotokolleintrag zu einem Skript zu leiten ... Vielen Dank für Ihre Hilfe! – Ray

+1

Ja, ich habe das auch gesucht und es scheint, als ob ErrorLog-Dateien nicht mit SetEnvIf getrennt werden können. Bitte schön. –