error_log на виртуальный хост?

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

helloandre
источник
7
Это журнал ошибок apache, который отделен от журнала ошибок PHP (см. Другие комментарии)
thelem
относительно чего? каталог, в котором httpd.confон написан, или?
mb21 03
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 не предупредит вас, если он не сможет записать в файл журнала.
Ian Dunn
Обратите внимание, что значение 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 / - это публичное пространство.
Clutch
13

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

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Кевин
источник
1
Кто-нибудь может прокомментировать разницу между php_admin_valueи php_value?
Nick M
1
Это объясняет разницу: mattiasgeniar.be/2012/02/18/…
Jeremy
9

По умолчанию error_log () выводит данные в журнал ошибок Apache. Если этого не происходит, проверьте в настройках php.ini директиву error_log. Оставьте его не установленным, чтобы использовать файл журнала Apache для текущего виртуального хоста.

Мат
источник
Я проверю. Мне просто интересно, можно ли по-прежнему иметь отдельный журнал ошибок 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на

rkulla
источник
Интересный. Это поведение зависит от пути к файлу error_log?
demonkoryu
6

Вы пробовали добавить php_value error_log '/path/to/php_error_logв конфигурацию VirtualHost?

хойхой
источник
6

Да, ты можешь попробовать,

php_value error_log "/var/log/php_log" 

in .htaccessили вы можете попросить пользователей использовать их ini_set()в начале своих сценариев, если они хотят вести журнал.

Другой вариант - включить скрипты по умолчанию php.iniв папку со скриптом, затем перейти в корневую папку пользователя / хоста, затем в корень сервера или что-то подобное. Это позволит хостам добавлять свои собственные php.iniзначения и свои собственные error_logместоположения.

Джеймс Хартиг
источник
6
php_value error_log "/var/log/httpd/vhost_php_error_log"

У меня это работает, но мне нужно изменить разрешение файла журнала.

или Apache запишет журнал в свой error_log.

sangjin
источник
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>
ejunker
источник
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 \ drivers \ и т. Д.

    127.0.0.1 thecontrolist.localhost в файле 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. Не забудьте перезапустить Apache. для получения дополнительной информации проверьте эту ссылку

Парвин Чаухан
источник