簡體   English   中英

向 logger.error 拋出新的異常

[英]Throw new Exception to logger.error

我想將此異常添加到記錄器:

throw new IllegalArgumentException("ex msg");

但是當我這樣嘗試時,我在“throw ex;”時出錯

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

知道如何解決這個問題嗎? 謝謝

嘗試使用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() (不完全是,但您應該明白這一點)。

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

這makex ex一個Exception ,你不能throw Exception沒有方法簽名聲明,所以通過改變下面的句子:

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

或在方法簽名中添加throw Exception

您的抽象方法簽名不正確。

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);

其實你的代碼應該工作。 Logger 應該在內部接受拋出的異常並打印它。 您不必將其包含在記錄器中(信息/調試/錯誤)。 下面的代碼綽綽有余。 如果記錄器配置正確,它不會在錯誤控制台(系統控制台)中打印。

throw new IllegalArgumentException("ex msg");

仍然不起作用,試試這個:

logger.error("Some exception happened : ", throw new IllegalArgumentException("ex msg"));

注意用逗號分隔字符串和異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM