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

92

На одном сервере Linux, на котором запущены Apache и PHP 5, мы получили несколько виртуальных хостов с отдельными файлами журналов и всем остальным. Единственное, что мы не можем разделить между виртуальными хостами, это php error_log.

Переопределение этой настройки в <Location> httpd.conf, похоже, ничего не делает.

Я что-то упустил? Есть ли способ иметь отдельный php error_logs для каждого виртуального хоста?

Теги:
virtualhost

10 ответов

75
Лучший ответ

Чтобы установить журнал Apache (а не PHP), самый простой способ сделать это:

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

Если нет ведущего "/", оно считается относительным.

Страница журнала ошибок Apache

  • 6
    Это журнал ошибок apache, который отделен от журнала ошибок PHP (см. Другие комментарии).
  • 2
    В журнале ошибок php по умолчанию используется журнал ошибок apache.
Показать ещё 2 комментария
135

Если кто-то придет посмотреть, он должен выглядеть так:

<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

  • 7
    В зависимости от вашей конфигурации вам может потребоваться вручную создать файл журнала и установить владельца / группу для того же пользователя / группы, которые использует Apache. Apache не предупредит вас, если не сможет записать в файл журнала.
  • 0
    Обратите внимание, что значение error_reporting изменяется с новыми версиями PHP, так как они добавляют больше уровней ошибок. E_ALL = "30719" прямо сейчас.
Показать ещё 3 комментария
12

Обычно я просто указываю это в файле .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/…
8

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

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

Не устанавливайте error_log туда, где находится ваш syslog материал, eg /var/log/apache2, потому что ошибки будут перехвачены ErrorLog. Вместо этого создайте subdir в папке проекта для журналов и сделайте php_value error_log "/path/to/project/logs". Это касается как файлов .htaccess, так и vhosts. Также убедитесь, что вы положили php_flag log_errors на

  • 0
    Интересно. Зависит ли это поведение от пути к файлу error_log?
5
php_value error_log "/var/log/httpd/vhost_php_error_log"

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

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

5

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

php_value error_log "/var/log/php_log" 

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

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

5

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

5

У моего Apache было что-то вроде этого в httpd.conf. Просто измените настройки ErrorLog и CustomLog

<VirtualHost myvhost:80>
    ServerAdmin [email protected]
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
  • 1
    Мы говорим о журнале PHP, а не о журнале Apache.
3

Вы можете попробовать:

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

Но я не уверен, что сработает. Я пробовал на своих сайтах без успеха.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню