error_log na wirtualnego hosta?

113

Na jednym serwerze Linux z Apache i PHP 5 mamy wiele wirtualnych hostów z oddzielnymi plikami dziennika. Nie możemy oddzielić php error_logmiędzy wirtualnymi hostami.

Zastępowanie tego ustawienia w <Location>z httpd.confnie wydaje się nic robić.

Czy istnieje sposób na utworzenie oddzielnego php error_logsdla każdego hosta wirtualnego?

Michael Stum
źródło

Odpowiedzi:

81

Aby ustawić dziennik Apache (a nie PHP ), najłatwiej to zrobić:

<VirtualHost IP:Port>
   # Stuff,
   # More Stuff,
   ErrorLog /path/where/you/want/the/error.log
</VirtualHost>

Jeśli nie ma wiodącego znaku „/”, przyjmuje się, że jest względny.

Strona dziennika błędów Apache

cześć
źródło
7
To jest dziennik błędów Apache, który jest oddzielny od dziennika błędów PHP (zobacz inne komentarze)
thelem
w stosunku do czego? katalog, w httpd.confktórym jest zapisany, lub?
mb21
141

Jeśli ktoś przyjdzie szukać, powinno to wyglądać tak:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>

To jest tylko do programowania, ponieważ display_errorjest włączone. Zauważysz, że dziennik błędów Apache jest oddzielny od dziennika błędów PHP. Dobra rzecz jest w środku php.error.log.

Spójrz tutaj na error_reportingklucz http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Sprzęgło
źródło
8
W zależności od konfiguracji może być konieczne ręczne utworzenie pliku dziennika i ustawienie właściciela / grupy na tego samego użytkownika / grupę, której używa Apache. Apache nie ostrzeże Cię, jeśli nie będzie mógł zapisywać do pliku dziennika.
Ian Dunn
Zauważ, że wartość „error_reporting” zmienia się wraz z nowymi wersjami PHP, gdy dodają więcej poziomów błędów. E_ALL = „30719” w tej chwili.
ReactiveRaven
2
Ponieważ wartości „error_reporting” ciągle się zmieniają i ponieważ nie możesz używać stałych PHP, takich jak „E_ALL” i „E_STRICT” poza php, w ten sposób upewniasz się, że zawsze rejestrowane są WSZYSTKIE błędy: php_value error_reporting 2147483647
Buttle Butkus
Dlaczego chcesz, aby Twój dziennik znajdował się w przestrzeni domeny publicznej?
AlxVallejo
1
Plik dziennika nie byłby publiczny. / html / to przestrzeń publiczna.
Sprzęgło
13

Zwykle wystarczy określić to w .htaccesspliku lubvhost.conf w domenie ja pracuję. Dodaj to do jednego z tych plików:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Kevin
źródło
1
Czy ktoś może wypowiedzieć się na temat różnicy między php_admin_valuei php_value?
Nick M,
1
To wyjaśnia różnicę: mattiasgeniar.be/2012/02/18/…
Jeremy
9

Domyślnym zachowaniem error_log () jest zapisywanie do dziennika błędów Apache. Jeśli tak się nie dzieje, sprawdź ustawienia php.ini pod kątem dyrektywy error_log. Pozostaw to ustawienie nieustawione, aby używać pliku dziennika Apache dla bieżącego vhosta.

Mata
źródło
Sprawdzę. Zastanawiam się tylko, czy nadal można mieć oddzielne dzienniki błędów apache i php, gdy chcemy dać programistom szansę na debugowanie ich kodu bez podawania im dziennika błędów apache, który może zawierać inne poufne dane.
Michael Stum
7

Nie ustawiaj miejsca, error_logw którym syslogtrafiają Twoje rzeczy eg /var/log/apache2, ponieważ błędy zostaną przechwycone ErrorLog. Zamiast tego utwórz foldersubdir w swoim projekcie dla dzienników i zrób php_value error_log "/path/to/project/logs". Dotyczy to zarówno .htaccess plików, jak i vhostów . Również upewnić się, można umieścić php_flag log_errorsna

rkulla
źródło
Ciekawy. Czy to zachowanie zależy od ścieżki do pliku error_log?
demonkoryu
6

Czy próbowałeś dodać php_value error_log '/path/to/php_error_logdo konfiguracji VirtualHost?

hoyhoy
źródło
6

Tak, możesz spróbować

php_value error_log "/var/log/php_log" 

w .htaccesslub możesz użyć użytkownikówini_set() na początku ich skryptów, jeśli chcą mieć logowanie.

Inną opcją byłoby włączenie domyślnych skryptów do php.inifolderu ze skryptem, a następnie przejście do folderu głównego użytkownika / hosta, a następnie do katalogu głównego serwera lub czegoś podobnego. Umożliwiłoby to gospodarzom dodawanie własnych php.iniwartości i własnych error_loglokalizacji.

James Hartig
źródło
6
php_value error_log "/var/log/httpd/vhost_php_error_log"

U mnie działa, ale muszę zmienić uprawnienia do pliku dziennika.

lub Apache zapisze dziennik do pliku error_log.

sangjin
źródło
5

Mój Apache miał coś takiego w httpd.conf. Po prostu zmień ustawienia ErrorLog i CustomLog

<VirtualHost myvhost:80>
    ServerAdmin [email protected]
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
ejunker
źródło
1
Mówimy tutaj o dzienniku PHP, a nie o dzienniku Apache.
demonkoryu
4

Możesz spróbować:

    <VirtualHost myvhost:80>
       php_value error_log "/var/log/httpd/vhost_php_error_log"
    </Virtual Host>

Ale nie jestem pewien, czy to zadziała. Próbowałem na moich stronach bez powodzenia.

Robinho
źródło
2

Utwórz prosty VirtualHost:

przykładowa nazwa hosta: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ drivers \ etc

    127.0.0.1 thecontrolist.localhost w pliku hosts

  2. C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf

    <VirtualHost *>
      ServerName thecontrolist.localhost
      ServerAlias thecontrolist.localhost
      DocumentRoot "/xampp/htdocs/thecontrolist"
      <Directory "/xampp/htdocs/thecontrolist">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
      </Directory>
    </VirtualHost>
    
  3. Nie zapomnij zrestartować swojego apache. po więcej sprawdź ten link

Parveen Chauhan
źródło