2010-08-20 17 views
171

Làm thế nào để bật tất cả các lỗi và cảnh báo và đăng nhập chúng vào một tệp nhưng để thiết lập tất cả điều đó trong tập lệnh (không thay đổi bất cứ điều gì trong php.ini). Tôi muốn xác định một tên tập tin và để tất cả các lỗi và cảnh báo được đăng nhập vào nó.Làm cách nào để ghi lại các lỗi và cảnh báo vào một tệp?

Trả lời

6

Hãy xem tùy chọn cấu hình log_errors trong php.ini. Nó dường như chỉ làm những gì bạn muốn. Tôi nghĩ bạn có thể sử dụng tùy chọn error_log để đặt tệp nhật ký của riêng bạn.

Khi chỉ thị log_errors được đặt thành On, mọi lỗi do PHP báo cáo sẽ được ghi vào nhật ký máy chủ hoặc tệp được chỉ định với error_log. Bạn cũng có thể đặt các tùy chọn này với ini_set nếu cần.

(Xin lưu ý rằng display_errors nên được vô hiệu hóa trong php.ini nếu tùy chọn này được kích hoạt)

+1

Tại sao nên 'display_errors' bị vô hiệu hóa nếu bạn bật 'log_errors'? Không có ý nghĩa trong quan điểm của tôi. :) –

+5

Vì không cần xuất nội dung của lỗi cho công chúng trên máy chủ sản xuất, đặc biệt nếu văn bản của lỗi đang được đăng nhập kín đáo vào tệp. – Shabbyrobe

+3

Lỗi hiển thị phải luôn bị tắt trên máy chủ sản xuất. Không phải nếu ghi nhật ký lỗi được định cấu hình ở một nơi khác, nhưng luôn luôn. Các lỗi được ghi vào nhật ký lỗi apache theo mặc định, điều đó thường là đủ. – Pihhan

293

Sử dụng đoạn mã sau:

ini_set("log_errors", 1); 
ini_set("error_log", "/tmp/php-error.log"); 
error_log("Hello, errors!"); 

Sau đó xem các file:

tail -f /tmp/php-error.log 

Hoặc cập nhật php.ini như được mô tả trong this blog entry từ năm 2008.

+38

'ini_set' chỉ hoạt động nếu mã đó được thực hiện. Không hữu ích cho mã có * lỗi phân tích cú pháp * vì lỗi sẽ là * trước * mã được thực hiện. Thay vào đó hãy viết những thay đổi đó vào php.ini. – hakre

+8

Nếu bạn không thể chỉnh sửa php.ini, bạn sẽ có thể thêm điều này trong .htaccess: 'php_flag log_errors trên php_value error_log/home/path/public_html/domain/PHP_errors.log'. Xem http://perishablepress.com/how-to-enable-php-error-logging-via-htaccess/ – Matthieu

+0

Tôi có một câu hỏi, làm thế nào để có được tập tin error.log để tạo ra trong thư mục htdocs của tôi thay vào đó? – Tommy

15

thêm mã này trong .htaccess (nếu bạn không có quyền truy cập vào php.ini)

<IfModule mod_php5.c> 
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log 
</IfModule> 

tái bút: điều này là dành cho các máy chủ kiểu Apache.

+6

Điều này đặc biệt liên quan đến mô-đun PHP của Apache. – SacredSkull

0

Ngoài ra, bạn cần chỉ thị "Tùy chọn AllowOverride" để làm việc này. (Apache 2.2.15)

2

Đó là chức năng ngắn cá nhân của tôi

# logging 
/* 
[2017-03-20 3:35:43] [INFO] [file.php] Here we are 
[2017-03-20 3:35:43] [ERROR] [file.php] Not good 
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty 

mylog ('hallo') -> INFO 
mylog ('fail', 'e') -> ERROR 
mylog ('next', 'd') -> DEBUG 
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log 
*/ 
function mylog($text, $level='i', $file='logs') { 
    switch (strtolower($level)) { 
     case 'e': 
     case 'error': 
      $level='ERROR'; 
      break; 
     case 'i': 
     case 'info': 
      $level='INFO'; 
      break; 
     case 'd': 
     case 'debug': 
      $level='DEBUG'; 
      break; 
     default: 
      $level='INFO'; 
    } 
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file); 
} 
5

Đơn giản chỉ cần đặt các mã trong top của file PHP/index của bạn:

error_reporting(E_ALL); // Error engine 

ini_set('display_errors', TRUE); // Error display 

ini_set('log_errors', TRUE); // Error logging 

ini_set('error_log', 'your/path/to/errors.log'); // Logging file 

ini_set('log_errors_max_len', 1024); // Logging file size 
+0

Chỉ khi bạn * cũng * muốn tất cả các lỗi được hiển thị trong đầu ra và/hoặc trình duyệt, * ngoài * để ghi nhật ký. 'display_errors' KHÔNG BAO GIỜ được bật trên máy chủ sản xuất trực tiếp - chỉ thị đó dành riêng cho đầu ra cho người dùng và không ảnh hưởng đến việc ghi nhật ký. http://www.php.net/manual/en/errorfunc.configuration.php#ini.display_errors –

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