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
Xem
error_log
- Gửi một thông báo lỗi ở đâu đó
Ví dụ
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
Bạn có thể customize error handling with your own error handlers để gọi chức năng này cho bạn bất cứ khi nào lỗi hoặc cảnh báo hoặc bất cứ điều gì bạn cần để đăng nhập xảy ra. Để biết thêm thông tin, vui lòng tham khảo Chapter Error Handling in the PHP Manual
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)
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.
'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
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
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
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.
Điều này đặc biệt liên quan đến mô-đun PHP của Apache. – SacredSkull
Ngoài ra, bạn cần chỉ thị "Tùy chọn AllowOverride" để làm việc này. (Apache 2.2.15)
Đó 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);
}
Đơ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
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 –
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. :) –
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
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