向logger.error抛出新的Exception

时间:2015-05-21 11:40:00

标签: java exception logging

我想将此异常添加到记录器:

throw new IllegalArgumentException("ex msg");

但是当我这样尝试的时候,我得到错误"抛出ex;"

Exception ex= new IllegalArgumentException("ex msg");
log.error("msg",ex);
throw ex;

知道如何解决这个问题吗? 感谢

3 个答案:

答案 0 :(得分:3)

尝试使用ex的特定类型,即IllegalArgumentException ex或至少RuntimeException ex,因为Exception是已检查的例外,并且如果没有throws Exception编译器会抱怨的方法签名。

为:

public void myMethod() {
  throw new Exception(); //this needs to be declared
}

好:

public void myMethod() throws Exception {
  throw new Exception(); 
}

public void myMethod() {
  throw new RuntimeException(); //those don't have to be declared
}

你的代码与坏的例子类似,因为编译器thow ex看起来像throw new Exception()(不完全是你应该得到的)。

答案 1 :(得分:1)

Exception ex= new IllegalArgumentException("ex msg");

这个makex exException并且您无法throw Exception而无需在方法签名中声明它,因此请在下面更改句子:

IllegalArgumentException ex= new IllegalArgumentException("ex msg");

或者在方法签名中添加throw Exception

答案 2 :(得分:0)

您的抽象方法签名不正确。

Exception ex = ... // The left side is a checked exception
...
throw ex; // Mr. Compiler, I want to throw a checked exception!

您告诉编译器您要抛出一个已检查的Exception,但该方法并未声明它。最好在作业的左侧使用尽可能少的抽象,但在这种情况下,你走得太远了:)你需要RuntimeException而不是Exception

// RuntimeException is unchecked.  No need to declare it.
RuntimeException ex = new IllegalArgumentException(msg);

而不是

// Exception is checked and needs to be declared
Exception ex = new IllegalArgumentException(msg);