在Java中,如何确保捕获和记录的所有异常在我的系统中提供堆栈跟踪?

在Java中,如何确保捕获和记录的所有异常在我的系统中提供堆栈跟踪?,java,logging,exception-handling,Java,Logging,Exception Handling,我希望能够防止这样的代码签入我的代码库: catch (Exception e) { LOG.error( "DeleteDir of " + tempDir + " failed: " + e ); throw e; } 这种日志记录只记录Exception.toString(),不提供操作员可能需要的其他详细信息,例如堆栈跟踪 我希望强制所有捕获日志块执行以下操作: catch (Exception e) { LOG.error( "DeleteDir of " + te

我希望能够防止这样的代码签入我的代码库:

catch (Exception e)
{
   LOG.error( "DeleteDir of " + tempDir + " failed: " + e );
   throw e;
}
这种日志记录只记录Exception.toString(),不提供操作员可能需要的其他详细信息,例如堆栈跟踪

我希望强制所有捕获日志块执行以下操作:

catch (Exception e)
{
   LOG.error( "DeleteDir of " + tempDir + " failed: " + e, e );
   throw e;
}
通过这种方式,我可以将底层日志实现配置为所需的详细(或不详细)


是否有任何静态分析工具或其他策略可以做到这一点?我找了一个FindBugs检查,但什么也没找到。

有两个开源静态分析工具,通常用于检查代码库中的不良模式:FindBugs和PMD。我快速扫描了这些工具的标准规则集,没有发现任何可以检查您希望从代码库中消除的模式的规则集

但是,FindBugs和PMD都允许您编写自己的自定义规则。这并不难做到


旁白:我希望示例“纯粹是为了说明”,并且在实际代码中永远不要处理这样的异常。如果你这样做了,(IMO)那么这是一个比你目前关注的问题更糟糕的问题:

  • 捕获并抛出异常是一个非常糟糕的主意。当您捕获
    异常
    类(或
    Throwable
    )时,您的处理程序不知道会发生什么异常。如果抛出或重新抛出
    异常
    ,则封闭方法必须处理它(参见上一句)或在签名中声明
    异常
    。这让情况变得更糟。如果你不小心,它会像癌症一样在你的代码库中扩散

  • 捕获异常,记录它,然后重新引用它也是一个坏主意。如果不小心,将多次记录相同的异常。通常,只有在异常最终得到处理时才记录它,这样做会更好。如果你总是包含stacktrace,那么程序员就有了他/她所需要的所有信息来找出异常抛出的位置,并且源代码会告诉他/她所有精确的调用链。。。不需要任何其他日志记录


有两种开源静态分析工具,通常用于检查代码库中的不良模式:FindBugs和PMD。我快速扫描了这些工具的标准规则集,没有发现任何可以检查您希望从代码库中消除的模式的规则集

但是,FindBugs和PMD都允许您编写自己的自定义规则。这并不难做到


旁白:我希望示例“纯粹是为了说明”,并且在实际代码中永远不要处理这样的异常。如果你这样做了,(IMO)那么这是一个比你目前关注的问题更糟糕的问题:

  • 捕获并抛出异常是一个非常糟糕的主意。当您捕获
    异常
    类(或
    Throwable
    )时,您的处理程序不知道会发生什么异常。如果抛出或重新抛出
    异常
    ,则封闭方法必须处理它(参见上一句)或在签名中声明
    异常
    。这让情况变得更糟。如果你不小心,它会像癌症一样在你的代码库中扩散

  • 捕获异常,记录它,然后重新引用它也是一个坏主意。如果不小心,将多次记录相同的异常。通常,只有在异常最终得到处理时才记录它,这样做会更好。如果你总是包含stacktrace,那么程序员就有了他/她所需要的所有信息来找出异常抛出的位置,并且源代码会告诉他/她所有精确的调用链。。。不需要任何其他日志记录


有两种开源静态分析工具,通常用于检查代码库中的不良模式:FindBugs和PMD。我快速扫描了这些工具的标准规则集,没有发现任何可以检查您希望从代码库中消除的模式的规则集

但是,FindBugs和PMD都允许您编写自己的自定义规则。这并不难做到


旁白:我希望示例“纯粹是为了说明”,并且在实际代码中永远不要处理这样的异常。如果你这样做了,(IMO)那么这是一个比你目前关注的问题更糟糕的问题:

  • 捕获并抛出异常是一个非常糟糕的主意。当您捕获
    异常
    类(或
    Throwable
    )时,您的处理程序不知道会发生什么异常。如果抛出或重新抛出
    异常
    ,则封闭方法必须处理它(参见上一句)或在签名中声明
    异常
    。这让情况变得更糟。如果你不小心,它会像癌症一样在你的代码库中扩散

  • 捕获异常,记录它,然后重新引用它也是一个坏主意。如果不小心,将多次记录相同的异常。通常,只有在异常最终得到处理时才记录它,这样做会更好。如果你总是包含stacktrace,那么程序员就有了他/她所需要的所有信息来找出异常抛出的位置,并且源代码会告诉他/她所有精确的调用链。。。不需要任何其他日志记录


有两种开源静态分析工具,通常用于检查代码库中的不良模式:FindBugs和PMD。我快速扫描了这些工具的标准规则集,没有发现任何可以检查您的模式的规则集