![](/img/trans.png)
[英]Logback not logging Exceptions using logger.error(message, throwable)
[英]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.