2012-05-07 25 views

Trả lời

88

Nó có nghĩa là bạn nên sử dụng khung đăng nhập như hoặc và thay vì ngoại lệ in ấn trực tiếp:

e.printStackTrace(); 

bạn nên đăng nhập chúng bằng API khuôn khổ này:

log.error("Ops!", e); 

khung Logging cung cấp cho bạn rất linh hoạt, ví dụ bạn có thể chọn xem bạn có muốn đăng nhập vào bảng điều khiển hoặc tệp hay không hoặc có thể bỏ qua một số thư nếu bạn thấy chúng không còn liên quan trong một số môi trường nữa.

31

Nếu bạn gọi printStackTrace() trên ngoại lệ, dấu vết được ghi đến System.err và thật khó để định tuyến ở nơi khác (hoặc lọc bộ lọc). Thay vì thực hiện điều này, bạn được khuyến khích sử dụng khung đăng nhập (hoặc trình bao bọc xung quanh nhiều khung đăng nhập, như Apache Commons Logging) và ghi lại ngoại lệ bằng cách sử dụng khung công tác đó (ví dụ: logger.error("some exception message", e)).

Làm điều đó cho phép bạn:

  • viết báo cáo kết quả đăng nhập đến các địa điểm khác nhau cùng một lúc, ví dụ bảng điều khiển và tệp
  • lọc báo cáo nhật ký theo mức độ nghiêm trọng (lỗi, cảnh báo, thông tin, gỡ lỗi, v.v.) và xuất xứ (thường gói hoặc lớp học)
  • có một số ảnh hưởng đến định dạng nhật ký mà không phải thay đổi mã
  • , vv
+0

Chỉ cần nói cảm ơn ở đây để có phản hồi có giá trị ở nơi khác ;-) – GhostCat

14

một sản xuất chương trình chất lượng nên sử dụng một trong những lựa chọn thay thế nhiều khai thác gỗ (ví dụ log4j, logback, java.util.logging) để báo cáo lỗi và chẩn đoán khác. Điều này có một số lợi thế:

  • Thông báo tường trình chuyển đến vị trí có thể định cấu hình.
  • Người dùng cuối không nhìn thấy tin nhắn trừ khi bạn định cấu hình ghi nhật ký để anh ấy/cô ấy thực hiện.
  • Bạn có thể sử dụng các trình ghi nhật ký và mức ghi khác nhau, v.v. để kiểm soát lượng ghi nhật ký ít hoặc nhiều.
  • Bạn có thể sử dụng các định dạng khác nhau của người gắn thêm để kiểm soát nội dung đăng nhập.
  • Bạn có thể dễ dàng cắm đầu ra ghi nhật ký vào một khung giám sát/ghi nhật ký lớn hơn.
  • Tất cả những điều trên có thể được thực hiện mà không cần thay đổi mã của bạn; tức là bằng cách chỉnh sửa tệp cấu hình ghi nhật ký của ứng dụng được triển khai.

Ngược lại, nếu bạn chỉ sử dụng printStackTrace, người triển khai/người dùng cuối có ít hoặc bất kỳ quyền kiểm soát và thông điệp ghi nào có thể bị mất hoặc hiển thị cho người dùng cuối trong những trường hợp không phù hợp.(Và không có gì đáng sợ một người dùng nhút nhát hơn một dấu vết ngăn xếp ngẫu nhiên.)

1

Hầu hết mọi khung đăng nhập đều cung cấp một phương thức để chúng ta có thể truyền đối tượng có thể ném cùng với một thông điệp. Giống như:

public trace(Marker marker, String msg, Throwable t); 

Chúng in ngăn xếp của đối tượng có thể ném.

3

Trong đơn giản, e.printStackTrace() không tốt, vì nó chỉ in ra dấu vết ngăn xếp thành lỗi chuẩn. Bởi vì điều này bạn không thể thực sự kiểm soát nơi đầu ra này đi.

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