Tôi đang gửi một số dấu vết ngăn xếp khá dài đến nhật ký lỗi apache bằng cách sử dụng 'error_log()' của php và các mục nhập sẽ bị cắt bớt. Tôi đã không tìm thấy một cách để làm cho mục lâu hơn. Bất kỳ ý tưởng nào?Làm thế nào để thực hiện các mục nhập nhật ký lỗi apache dài hơn
Trả lời
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
Cấu hình này sẽ xoay logfile lỗi bất cứ khi nào nó đạt đến một kích thước 5 megabyte, và hậu tố tên logfile sẽ được tạo ra có dạng errorlog.YYYY-mm-dd-HH_MM_SS.
Đối với tài liệu chính thức đọc thêm từ apache.org Link Here
Giới hạn mặc định trên chiều dài tối đa của thông báo lỗi đi qua error_log() là 1024 byte.
Thông tin chi tiết có http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len
Đọc câu hỏi trên khiến tôi tự hỏi, nếu vấn đề là trong Apache. Có, việc cắt ngắn xảy ra trong PHP cho Apache sẽ cho phép thậm chí trên 10.000 ký tự. Dưới đây là một kịch bản Perl đánh giá khả năng của Apache để gửi các thông báo lỗi dài vào log của nó:
#!/usr/bin/perl -w
#
# Test error log length limitations
# Result: no limitation
#
#
use strict;
use CGI;
my $query = CGI->new;
print $query->header;
print "<html><body>You have reached "
."cgi-bin/admin/test_error_log.pl"
."</body></html>\n";
print STDERR "This is an error message from $0\n";
print STDERR "
[Above should be a blank line] here is a multiline error message
here is the third and final line of it\n";
print STDERR 'abcde' x 200; #1,000 characters
print STDERR "\nAbove is 1,000 characters of output of 'abcde'\n";
print STDERR 'vwxyz' x 2000; #10,000 characters
print STDERR "\nAbove is 10,000 characters of output of 'vwxyz'\n";
Tôi có cùng một vấn đề với Nginx. –
PHP Manual nói về các thiết lập log_errors_max_len
trong php.ini:
Đặt độ dài tối đa của log_errors theo byte . (...) Mặc định là 1024 và 0 cho phép không áp dụng bất kỳ độ dài tối đa nào.
Một số người cho rằng bạn có thể thay đổi nó làm ví dụ:
ini_set("log_errors_max_len", 2048);
Nhưng Manual cho biết thêm:
chiều dài này được áp dụng cho các lỗi đăng nhập, hiển thị lỗi và cũng để $ php_errormsg, nhưng không được gọi một cách rõ ràng các chức năng như error_log().
Tôi đang cố tìm giải pháp. Sẽ chỉnh sửa nếu tôi làm.
Khi Leopoldo said, thiết lập log_errors_max_len
có vẻ khá vô ích trong trường hợp này và hướng dẫn sử dụng PHP nêu rõ điều này.
Giải pháp duy nhất tôi đã có thể tìm thấy cho đến nay là sử dụng:
error_log("Long error message...", 3, CUSTOM_LOG_FILE);
Tham số thứ hai của error_log()
cho phép bạn chuyển hướng thông điệp vào một tập tin tùy chỉnh. Vì vậy, tham số cuối cùng phải là đường dẫn đến tệp nhật ký tùy chỉnh. Bằng cách này tôi nhận được thông báo lỗi đầy đủ và điều gì quan trọng hơn đối với ai đó, các ký tự không phải ASCII có thể đọc được rõ ràng (không chắc chắn, có thể là xấu của tôi, nhưng khi tôi đăng nhập bằng nhật ký chuẩn) file - Tôi nhận được những thứ như \xd0\xbf
).
-1 Tôi không chắc tại sao đây là câu trả lời được chấp nhận.Điều này sẽ không làm bất cứ điều gì để ngăn chặn cắt bớt các mục riêng lẻ trong nhật ký. –
Điều này thực sự sẽ cắt ngắn nhật ký dài vì nó bị hạn chế bởi giới hạn chiều dài đường ống của hệ điều hành. –