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 –
- 1. Làm cách nào để tắt "cảnh báo là lỗi" cho các tệp được tạo? (MSBuild)
- 2. Làm cách nào để định dạng cảnh báo được ghi lại bằng logging.captureWarnings?
- 3. Eclipse: Làm cách nào để giới hạn các lỗi/cảnh báo hiển thị đối với các tệp đang mở?
- 4. Làm cách nào để ghi lại tệp makefile?
- 5. Làm cho một gcc cảnh báo lỗi?
- 6. Làm cách nào để tô màu các lỗi git, cảnh báo và thông báo gây tử vong?
- 7. Làm cách nào để triển khai cảnh báo lỗi mạng vào ứng dụng của tôi?
- 8. Làm cách nào để ghi đè sự kiện lỗi window.location?
- 9. Làm cách nào để định dạng và thêm tệp vào hadoop sau khi nó bị lỗi?
- 10. Làm cách nào để ghi lại các lỗi giải mã utf-8 trong node.js?
- 11. Làm cách nào để đóng một cảnh báo Android
- 12. Làm cách nào để chặn cảnh báo cho một tệp ActionScript?
- 13. Cách tắt cảnh báo để xác định lại một hằng số khi tải tệp
- 14. Làm thế nào để JVM và Java thực hiện việc đọc và ghi vào các tệp?
- 15. Lỗi và cảnh báo màu CMake
- 16. Làm thế nào để xác định lại một hằng số Ruby mà không cần cảnh báo?
- 17. ghi lại âm thanh hệ thống (stereomix) vào một tệp
- 18. Nginx + FastCGI + PHP (php-fpm) không ghi nhật ký lỗi bị lỗi/cảnh báo
- 19. Làm cách nào để ghi một tệp an toàn?
- 20. Bạn làm cách nào để ghi lại một API REST?
- 21. Làm cách nào để ghi lại một mảng của [loại]?
- 22. Làm cách nào để xử lý cảnh báo LaTeX dưới dạng lỗi
- 23. Làm cách nào để ngăn chặn cảnh báo StyleCop SA1403?
- 24. Disable MagicalRecord thông báo lỗi và cảnh báo
- 25. Thông báo cảnh báo: Trong tệp (tệp, "rt")
- 26. Javadoc: Coi các cảnh báo là lỗi?
- 27. Làm cách nào để tắt cảnh báo thụt lề JSLint?
- 28. Làm thế nào để ghi một tệp văn bản lớn vào C# một cách hiệu quả?
- 29. Bạn có thể ghi lại các lỗi php vào nhiều tệp không?
- 30. IDEA: Làm cách nào để ngăn chặn cảnh báo về lỗi chính tả?
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