Ứng dụng web của chúng tôi đang sử dụng một ExceptionMapper
để ánh xạ một số ngoại lệ Response
. Chúng tôi ghi nhật ký các thông báo ngoại lệ trước khi đưa ra một ngoại lệ mới như sau:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Chúng tôi sẽ không ném lại ngoại lệ tương tự , vì vậy câu hỏi của tôi là liệu đây có được coi là một antipotype Log và Ném không . Và do đó, sẽ tốt hơn nếu xóa nhật ký ở những nơi tương tự và di chuyển chúng đến một số ExceptionMapper
lớp như sau:
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
có thể trùng lặp bạn có nên báo cáo văn bản tin nhắn ngoại lệ không?
Đề gây tranh cãi, báo cáo nội dung thông điệp của ngoại lệ là luôn luôn là một ý tưởng tồi .
IMO thật sự không công bằng khi không đề cập đến tất cả rằng đây là một dịch vụ web. Điều đó thực sự làm thay đổi các quy tắc trò chơi, vì ví dụ chỉ sử dụng cơ chế xử lý ngoại lệ thông thường có thể là một rủi ro bảo mật; bạn không muốn bất kỳ và tất cả ngoại lệ chỉ được gửi lại trong phản hồi lỗi 500, cần phải được kiểm tra và lọc. Ghi nhật ký tại chỗ tích cực cũng phổ biến hơn nhiều khi xử lý các hệ thống có máy khách bên ngoài trực tiếp gọi nó. Ghi nhật ký stacktraces trong các cuộc gọi dịch vụ được gọi liên tục có thể dẫn đến kích thước tệp nhật ký không thể quản lý và các vấn đề về hiệu suất.
@Gimby Trong trường hợp này, OP không gửi bất kỳ chi tiết lỗi nào trong phản hồi (có thể là nội dung "lỗi xảy ra"). Ngoài ra, làm thế nào để bạn chẩn đoán một vấn đề mà không có stacktrace? Các logger thường xuyên chăm sóc kích thước lưu trữ và dữ liệu nhật ký có thể nén được.
—
Marko Topolnik
ex.getMessage()
, điều đó đã sai.