当前位置: 首页 > 面试题库 >

抛出异常与日志记录

西门嘉澍
2023-03-14
问题内容

下面的编码方法是好的做法吗?

try {
    //my code here
} catch (Exception e) {
    logger.error("Some error ", e);
    throw new MyCustomException("Some error ", e);
}

而且,我应该

  • 仅使用记录器?
  • 只抛出异常?
  • 两者都做吗?

我知道throw可以在调用堆栈的另一部分捕获异常,但是也许其他日志记录有一些隐藏的好处,并且也很有用。


问题答案:

在某些情况下,我会同时使用日志记录和引发异常。特别是,它在API中很有用。通过抛出异常,我们允许调用者对其进行处理,并通过记录日志,我们可以自行确定其根本原因。

而且,如果调用者在同一系统中,则如果我们在每个捕获中添加日志,则将有重复的日志。



 类似资料:
  • 我的程序中有下面的代码,在与Maven集成后,我正在运行SonarQube 5进行代码质量检查。 然而,Sonar抱怨说,我应该记录或者重播这个异常。 我错过了什么?我还没有记录异常吗?

  • 在将big project移植到log4j2之后,我注意到异常日志不起作用。这样的代码

  • 但在我的代码中,我记录了大部分信息 用户名错误发生,计时,整个异常,错误,方法,行号,文件路径,服务网址,所有这些东西,但我仍然面临这个问题,请帮助我解决这个问题。我使用的是ASP.NET核心web API。

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 在许多地方,我得到了几个已检查的异常,如IOException、ParseException、JSoneException等。我必须做出两个选择之一- > 通过在方法签名的末尾添加抛出来抛出相同的异常。 将检查的异常包装在RuntimeException(或一些自定义实现)中,然后抛出它,以便调用者不必在任何地方添加throws子句并检查异常。 在第一种情况下,我将不得不到处抛出,但我的客户可以通

  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静