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.