2008-08-01 42 views
96

Trên một Máy chủ Linux đang chạy Apache và PHP 5, chúng tôi có nhiều Máy chủ ảo với các tệp nhật ký riêng biệt. Chúng tôi dường như không thể tách biệt php error_log giữa các máy chủ ảo.error_log trên Máy chủ ảo?

Ghi đè cài đặt này trong <Location> của httpd.conf dường như không làm gì cả.

Có cách nào để có php riêng biệt error_logs cho mỗi Máy chủ ảo không?

Trả lời

73

Để đặt Apache (không phải là PHP) đăng nhập, cách dễ nhất để làm điều này sẽ được thực hiện:

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

Nếu không có hàng đầu thế giới "/" nó được giả định là quan hệ.

Apache Error Log Page

+6

Đó là apache log lỗi, đó là riêng biệt để các bản ghi lỗi PHP (xem ý kiến ​​khác) log lỗi – thelem

+2

php của giá trị mặc định để log lỗi của apache. – helloandre

+0

liên quan đến cái gì? thư mục của 'httpd.conf' nó được viết trong, hoặc? – mb21

8

Hành vi mặc định là dành cho error_log() để xuất ra các bản ghi lỗi Apache. Nếu điều này không xảy ra, hãy kiểm tra cài đặt php.ini của bạn để biết chỉ thị error_log - để nó không được đặt để sử dụng tệp nhật ký Apache cho vhost hiện tại.

+0

Tôi sẽ kiểm tra. Tôi chỉ tự hỏi nếu nó có thể vẫn có apache và php lỗi đăng nhập riêng biệt khi chúng tôi muốn cung cấp cho các nhà phát triển một cơ hội để gỡ lỗi mã của họ mà không cho họ nhật ký lỗi apache có thể chứa dữ liệu nhạy cảm khác. –

12

Tôi thường chỉ xác định điều này trong một tệp .htaccesshoặc số vhost.conf trên miền mà tôi đang làm việc. Thêm tệp này vào một trong các tệp sau:

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

Có ai có thể bình luận về sự khác biệt giữa 'php_admin_value' và' php_value'? –

+1

Điều này giải thích sự khác biệt: http://mattiasgeniar.be/2012/02/18/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/ – Jeremy

5

Apache của tôi có dạng như thế này trong httpd.conf. Chỉ cần thay đổi cài đặt ErrorLog và CustomLog

<VirtualHost myvhost:80> 
    ServerAdmin [email protected] 
    DocumentRoot /opt/web 
    ServerName myvhost 
    ErrorLog logs/myvhost-error_log 
    CustomLog logs/myvhost-access_log common 
</VirtualHost> 
+0

Chúng tôi đang nói về nhật ký PHP, không phải nhật ký Apache ở đây. – demonkoryu

5

Bạn đã thử thêm php_value error_log '/path/to/php_error_log vào cấu hình VirtualHost của mình chưa?

3

Bạn có thể thử:

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

Nhưng tôi không chắc chắn nếu là đi làm việc. Tôi đã thử trên các trang web của mình mà không thành công.

5

Vâng, bạn có thể thử,

php_value error_log "/var/log/php_log" 

trong .htaccess hoặc bạn có thể có những người dùng sử dụng ini_set() vào đầu kịch bản của họ nếu họ muốn có khai thác gỗ.

Một tùy chọn khác là cho phép tập lệnh đặt mặc định thành php.ini trong thư mục có tập lệnh, sau đó chuyển đến thư mục gốc của người dùng/máy chủ, sau đó đến thư mục gốc của máy chủ hoặc tương tự. Điều này sẽ cho phép chủ nhà thêm các giá trị php.ini của riêng họ và các vị trí error_log của riêng họ.

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

Nó làm việc cho tôi, nhưng tôi phải thay đổi quyền của tệp nhật ký.

hoặc Apache sẽ ghi nhật ký vào error_log của nó.

6

Không được đặt error_log đến nơi syslog nội dung đi kèm, eg /var/log/apache2 của bạn, vì lỗi này sẽ bị chặn bởi ErrorLog.Thay vào đó, hãy tạo subdir trong thư mục dự án cho nhật ký và thực hiện php_valueerror_log "/path/to/project/logs". Điều này xảy ra cho cả hai tệp .htaccessvà vhosts. Ngoài ra hãy chắc chắn rằng bạn đặt php_flaglog_errors trên

+0

Thú vị. Hành vi này có phụ thuộc vào đường dẫn của tệp error_log không? – demonkoryu

131

Nếu ai đó đi kèm tìm kiếm nó sẽ giống như thế này:

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

này là dành cho phát triển chỉ từ display_error được bật. Bạn sẽ thấy rằng nhật ký lỗi Apache tách biệt với nhật ký lỗi PHP. Nội dung hay là ở số php.error.log.

Hãy xem ở đây cho error_reporting chính http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

+6

Tùy thuộc vào cấu hình của bạn, bạn có thể cần phải tạo thủ công tệp nhật ký và đặt chủ sở hữu/nhóm thành cùng một người dùng/nhóm mà Apache đang sử dụng. Apache sẽ không cảnh báo bạn nếu nó không thể ghi vào tệp nhật ký. –

+0

Lưu ý rằng giá trị "error_reporting" thay đổi với các phiên bản PHP mới khi chúng thêm nhiều mức lỗi hơn. E_ALL = "30719" ngay bây giờ. – ReactiveRaven

+2

Vì các giá trị "error_reporting" tiếp tục thay đổi và vì bạn không thể sử dụng các hằng số PHP như "E_ALL" và "E_STRICT" bên ngoài php, đây là cách bạn đảm bảo bạn luôn có tất cả các lỗi được ghi: php_value error_reporting 2147483647 –

Các vấn đề liên quan