使用SLF4J记录错误消息和异常的正确方法是什么?
我试过这样做但是从不打印异常堆栈跟踪:
logger.error("Unable to parse data {}", inputMessage, e);
在这种情况下,我想填充{}与inputMessage和退出异常堆栈跟踪.
我能看到这样做的唯一方法就是这样做:
logger.error("Unable to parse data " + inputMessage, e);
这不漂亮.
我在我的程序中有以下代码片段,并且在与Maven集成之后,我正在运行SonarQube 5以进行代码质量检查.
然而,Sonar抱怨我应该记录或重新抛出此异常.
我在这里错过了什么?我还没有记录异常吗?
private boolean authenticate(User user) {
boolean validUser = false;
int validUserCount = 0;
try {
DataSource dataSource = (DataSource) getServletContext().getAttribute("dataSource");
validUserCount = new MasterDao(dataSource).getValidUserCount(user);
} catch (SQLException sqle) {
LOG.error("Exception while validating user credentials for user with username: " + user.getUsername() + " and pwd:" + user.getPwd());
LOG.error(sqle.getMessage());
}
if (validUserCount == 1) {
validUser = true;
}
return validUser;
}
Run Code Online (Sandbox Code Playgroud) Sonar可能重复抱怨记录和重新抛出异常.
这是我在课堂上的代码:
try
{
this.processDeepLinkData(data);
}
catch (final Exception e)
{
// Error while parsing data
// Nothing we can do
Logger.error(TAG, "Exception thrown on processDeepLinkData. Msg: " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
和我的Logger类:
import android.content.Context;
import android.util.Log;
import com.crashlytics.android.Crashlytics;
public final class Logger
{
/**
* Convenience method.
*
* @see Logger#log(String, String)
*/
public static void error(final String tag, final String msg)
{
if (Logger.DEBUG)
{
Log.e(tag, "" + msg);
}
else
{
Logger.log(tag, "" + msg); …Run Code Online (Sandbox Code Playgroud)