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?

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


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


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"

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.


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


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?


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.


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.


5

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

<VirtualHost myvhost:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.