내 채널 파이프 라인에는 많은 핸들러가 있습니다. 내가 그들의 exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
메소드를 오버라이드 (override)하지 않으면 내가 알고있는 것처럼Netty 4에서 모든 처리기의 처리되지 않은 예외를 catch하는 방법은 무엇입니까?
이 기본 동작 인 cause
는 파이프 라인 밖으로 던져되며, 파이프 라인에 의해 레벨을 WARN에서 이런 일이 기록 될 것입니다 :
An exception was thrown by a user handler's exceptionCaught() method while handling the following exception: ...
특정 로직을 추가하기 위해 위의 파이프 라인 동작을 덮어 쓰고 싶습니다 (예 : cause
이 java.io.IOException: Connection reset by peer
인 경우 WARN 레벨에서 너무 많은 "유용하지 않은"로그를 피하기 위해 아무것도 기록하지 마십시오).
private void invokeExceptionCaught(final Throwable cause) {
try {
handler.exceptionCaught(this, cause);
} catch (Throwable t) {
if (logger.isWarnEnabled()) {
logger.warn(
"An exception was thrown by a user handler's " +
"exceptionCaught() method while handling the following exception:", cause);
}
}
}
이 private
이기 때문에, 나는 쉽게 반사를 사용하지 않고 그것을 무시할 수 있다고 생각하지 않습니다 :
확인했습니다. 이 솔루션은 작동합니다! 감사! –