error_log trên mỗi Máy chủ ảo?


113

Trên một Máy chủ Linux 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 ta dường như không thể tách php error_loggiữa các máy chủ ảo.

Ghi đè cài đặt này trong <Location>của httpd.confdường như không làm bất cứ điều gì.

Có cách nào để có php riêng biệt error_logscho từng Máy chủ ảo không?

Câu trả lời:


81

Để đặt nhật ký Apache ( không phải PHP ), cách dễ nhất để thực hiện việc này là:

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

Nếu không có "/" đứng đầu thì nó được coi là tương đối.

Trang nhật ký lỗi Apache


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

liên quan đến cái gì? thư mục của httpd.confnó được viết bằng, hoặc?
mb21

141

Nếu ai đó đến tìm, nó sẽ trô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>

Điều này chỉ dành cho phát triển kể từ khi display_errorđược bật. Bạn sẽ nhận thấy rằng nhật ký lỗi Apache tách biệt với nhật ký lỗi PHP. Những thứ tốt là trong php.error.log.

Hãy xem tại đây để biết error_reportingkhóa http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


8
Tùy thuộc vào cấu hình của bạn, bạn có thể cần phải tạo tệp nhật ký theo cách thủ công và đặt chủ sở hữu / nhóm thành người dùng / nhóm giống như 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ý.
Ian Dunn

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
Kể từ khi "error_reporting" giá trị liên tục thay đổi và kể từ khi bạn không thể sử dụng PHP hằng như "E_ALL" và "E_STRICT" bên ngoài của php, đây là cách bạn đảm bảo bạn luôn có tất cả các lỗi đăng nhập: php_value error_reporting 2147483647
Buttle Butkus

Tại sao bạn muốn đăng nhập của mình trong không gian miền công cộng của bạn?
AlxVallejo,

1
Tệp nhật ký sẽ không được công khai. / html / là không gian công cộng.
Ly hợp

13

Tôi thường chỉ cần chỉ định này trong một .htaccesstập tin hoặc các vhost.conftrên lĩnh vực tôi đang làm việc trên. Thêm cái 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
Bất cứ ai có thể nhận xét về sự khác biệt giữa php_admin_valuephp_value?
Nick M

1
Điều này giải thích sự khác biệt: mattiasgeniar.be/2012/02/18/…
Jeremy

9

Hành vi mặc định cho error_log () là xuất ra nhật ký 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. Không đặt nó để sử dụng tệp nhật ký Apache cho vhost hiện tại.


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

7

Đừng đặt error_logđến nơi syslognội dung của bạn đi eg /var/log/apache2, vì chúng sẽ bị lỗi ErrorLog. Thay vào đó, hãy tạo một thư mụcsubdir trong dự án của bạn cho các bản ghi và thực hiện php_value error_log "/path/to/project/logs". Điều này áp dụng cho cả .htaccess tệp và vhosts . Ngoài ra, hãy chắc chắn rằng bạn mặc php_flag log_errorsvào


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

6

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


6

Có, bạn có thể thử,

php_value error_log "/var/log/php_log" 

trong .htaccesshoặc bạn có thể để người dùng sử dụng ini_set()trong phần đầu của tập lệnh của họ nếu họ muốn ghi nhật ký.

Một tùy chọn khác sẽ là bật các tập lệnh thành mặc định php.initrong thư mục có tập lệnh, sau đó đi tới thư mục gốc của người dùng / máy chủ lưu trữ, 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 các máy chủ lưu trữ thêm các php.inigiá trị và error_logvị trí của riêng chúng .


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

Nó hoạt động đối với 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 tệp của nó error_log.


5

Apache của tôi có một cái gì đó giống như thế này trong httpd.conf. Chỉ cần thay đổi cài đặt ErrorLog và 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
Chúng ta đang nói về nhật ký PHP, không phải nhật ký Apache ở đây.
devilkoryu

4

Bạn co 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 liệu nó có hiệu quả hay không. Tôi đã thử trên các trang web của mình nhưng không thành công.


2

Tạo bài đăng ảo đơn giản:

tên máy chủ ví dụ: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ drivers \ etc

    127.0.0.1 thecontrolist.localhost trong tệp máy chủ

  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. Đừng quên khởi động lại apache của bạn. để biết thêm kiểm tra liên kết này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.