Bạn đang chạm vào nhiều vấn đề ở đây:
1) Dấu vết ngăn xếp không bao giờ được hiển thị cho người dùng cuối (vì mục đích bảo mật và trải nghiệm người dùng)
Có, có thể truy cập để chẩn đoán sự cố của người dùng cuối, nhưng người dùng cuối không nên xem chúng vì hai lý do:
- Chúng rất tối nghĩa và không thể đọc được, ứng dụng sẽ trông rất không thân thiện với người dùng.
- Hiển thị dấu vết ngăn xếp cho người dùng cuối có thể gây ra rủi ro bảo mật tiềm ẩn. Chính xác cho tôi nếu tôi sai, PHP thực sự in các tham số hàm trong theo dõi ngăn xếp - tuyệt vời, nhưng rất nguy hiểm - nếu bạn sẽ có ngoại lệ trong khi kết nối với cơ sở dữ liệu, bạn có khả năng gì trong stacktrace?
2) Tạo theo dõi ngăn xếp là một quá trình tương đối tốn kém (mặc dù không chắc là vấn đề trong hầu hết các trường hợp ngoại lệ)
Tạo dấu vết ngăn xếp xảy ra khi ngoại lệ được tạo / ném (đó là lý do tại sao ném ngoại lệ đi kèm với giá), in ấn không đắt lắm. Trong thực tế, bạn có thể ghi đè lên Throwable#fillInStackTrace()
ngoại lệ tùy chỉnh của mình một cách hiệu quả khiến cho việc ném một ngoại lệ gần như rẻ như một tuyên bố GOTO đơn giản.
3) Nhiều khung ghi nhật ký sẽ in dấu vết ngăn xếp cho bạn (chúng tôi không và không, chúng tôi không thể thay đổi dễ dàng)
Điểm rất tốt. Vấn đề chính ở đây là: nếu khung ghi lại ngoại lệ cho bạn, không làm gì cả (nhưng hãy chắc chắn là có!) Nếu bạn muốn tự mình đăng nhập ngoại lệ, hãy sử dụng khung đăng nhập như Logback hoặc Log4J , để không đưa chúng vào bảng điều khiển thô bởi vì nó rất khó kiểm soát nó
Với khung ghi nhật ký, bạn có thể dễ dàng chuyển hướng dấu vết ngăn xếp thành tệp, bảng điều khiển hoặc thậm chí gửi chúng đến một địa chỉ email được chỉ định. Với mã hóa cứng, printStackTrace()
bạn phải sống với sysout
.
4) In dấu vết ngăn xếp không cấu thành xử lý lỗi. Nó nên được kết hợp với ghi nhật ký thông tin khác và xử lý ngoại lệ.
Một lần nữa: đăng nhập SQLException
chính xác (với theo dõi ngăn xếp đầy đủ, sử dụng khung ghi nhật ký) và hiển thị tốt: " Xin lỗi, chúng tôi hiện không thể xử lý yêu cầu của bạn ". Bạn có thực sự nghĩ rằng người dùng quan tâm đến lý do? Bạn đã thấy màn hình lỗi StackOverflow? Nó rất hài hước, nhưng không tiết lộ bất kỳ chi tiết. Tuy nhiên, nó đảm bảo cho người dùng rằng vấn đề sẽ được điều tra.
Nhưng anh ấy sẽ gọi cho bạn ngay lập tức và bạn cần có khả năng chẩn đoán vấn đề. Vì vậy, bạn cần cả hai: ghi nhật ký ngoại lệ phù hợp và tin nhắn thân thiện với người dùng.
Để kết thúc mọi thứ: luôn ghi nhật ký ngoại lệ (tốt nhất là sử dụng khung ghi nhật ký ), nhưng không để lộ chúng cho người dùng cuối. Hãy suy nghĩ cẩn thận và về các thông báo lỗi trong GUI của bạn, chỉ hiển thị dấu vết ngăn xếp trong chế độ phát triển.