error_log per Virtual Host?


113

На одному Linux-сервері під управлінням Apache та PHP 5 у нас є кілька віртуальних хостів з окремими файлами журналу. Здається, ми не можемо розділяти php error_logміж віртуальними хостами.

Перевизначення цього параметра в <Location>з , httpd.confздається, не робити нічого.

Чи існує спосіб мати окремий php error_logsдля кожного віртуального хоста?

Відповіді:


81

Щоб встановити журнал Apache ( не PHP ), найпростішим способом це було б зробити:

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

Якщо немає провідних "/", вважається відносним.

Сторінка журналу помилок Apache


7
Це журнал помилок apache, який є окремим журналом помилок PHP (див. Інші коментарі)
Thelem

відносно чого? каталог цього запису httpd.conf, або?
mb21

141

Якщо хтось приходить шукати, це має виглядати приблизно так:

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

Це лише для розробки, оскільки display_errorввімкнено. Ви помітите, що журнал помилок Apache відокремлений від журналу помилок PHP. Хороший матеріал є в php.error.log.

Погляньте тут на error_reportingключ http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


8
Залежно від конфігурації, вам може знадобитися створити файл журналу та встановити власника / групу того самого користувача / групи, який використовує Apache. Apache не попередить вас, якщо він не може записати у файл журналу.
Ян Данн

Зауважте, що значення "error_reporting" змінюється в нових версіях PHP, оскільки вони додають більше рівнів помилок. E_ALL = "30719" зараз.
ReactiveRaven

2
Оскільки значення "error_reporting" постійно змінюються, і оскільки ви не можете використовувати константи PHP, такі як "E_ALL" та "E_STRICT" поза php, саме так ви гарантуєте, що у вас завжди ВСІ помилки: "php_value error_reporting 2147483647
Buttle Butkus

Чому ви хочете, щоб ваш журнал був у вашому просторі публічного домену?
AlxVallejo

1
Файл журналу не буде загальнодоступним. / html / - це публічний простір.
Зчеплення

13

Я зазвичай просто вказати це в .htaccessфайлі абоvhost.conf на домені я працюю. Додайте це до одного з цих файлів:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"

1
Хтось може прокоментувати різницю між php_admin_valueі php_value?
Нік М

1
Це пояснює різницю: mattiasgeniar.be/2012/02/18/…
Джеремі

9

Типова поведінка для error_log () полягає у виведенні в журнал помилок Apache. Якщо цього не відбувається, перевірте свої параметри php.ini на директиву error_log. Залиште невідомим, щоб використовувати файл журналу Apache для поточного vhost.


Я перевірю. Мені просто цікаво, чи можна все-таки мати журнал помилок apache та php окремо, коли ми хочемо дати розробникам можливість налагодити свій код, не надаючи їм журнал помилок apache, який може містити інші чутливі дані.
Майкл Стум

7

Не встановлюйте, error_logкуди syslogподіляться ваші речі eg /var/log/apache2, оскільки їх помилки будуть перехоплені ErrorLog. Натомість створіть subdirу папці свого проекту для журналів і зробіть php_value error_log "/path/to/project/logs". Це стосується і .htaccess файлів, і vhosts . Крім того, переконайтеся , що ви поклали php_flag log_errorsна


Цікаво. Чи залежить ця поведінка від шляху файлу error_log?
demonkoryu

6

Ви намагалися додати php_value error_log '/path/to/php_error_logконфігурацію до VirtualHost?


6

Так, ви можете спробувати,

php_value error_log "/var/log/php_log" 

в .htaccessабо ви можете використовувати користувачі ini_set()на початку своїх сценаріїв , якщо вони хочуть мати реєстрацію.

Іншим варіантом буде включити сценарії за замовчуванням до php.iniпапки зі скриптом, потім перейти до кореневої папки користувача / хоста, потім до кореня сервера чи щось подібне. Це дозволить хостам додавати власні php.iniзначення та власні error_logмісця розташування.


6
php_value error_log "/var/log/httpd/vhost_php_error_log"

Це працює для мене, але я повинен змінити дозвіл на файл журналу.

або Apache запише журнал до свого error_log.


5

У мого Apache було щось подібне у httpd.conf. Просто змініть налаштування ErrorLog та 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
Ми говоримо про журнал PHP, а не про журнал Apache.
demonkoryu

4

Ви можете спробувати:

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

Але я не впевнений, чи буде це працювати. Я намагався на своїх сайтах не мати успіху.


2

Створіть простий VirtualHost:

приклад ім'я хоста: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ драйвери \ тощо

    127.0.0.1 thecontrolist.localhost у файлі хостів

  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. Не забудьте перезапустити апаш. для більш детальної перевірки цього посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.