首页 > 解决方案 > Java - 记录对象(CustomException)实例化的注释?

问题描述

请关于对象实例化和日志记录的 Java 小问题。

在我们(太大)的项目中,我们有一个特殊的 MyCustomException 异常被抛出。

通常的代码将类似于:

if (conditionNotMet()) {
    throw new MyCustomException();
try {

} catch (SomeException e) {
    throw new MyCustomException();

有好几千次这样的投掷。对于所有这些,我们希望添加日志记录,例如:

if (conditionNotMet()) {
    LOGGER.error(something bad happened, throwing a new MyCustomException());
    throw new MyCustomException();
try {

} catch (SomeException e) {
    LOGGER.error(something bad happened, throwing a new MyCustomException());
    throw new MyCustomException();

正如您可以想象的那样,由于我们有成千上万的这样,我们正在浪费大量时间在所有地方添加 LOGGER。

我想知道,是否可以在 MyCustomException 上添加某种注释,例如:

@LogMeWhenIamCreated
public MyCustomException(...) {
   

所以我们可以只把这个注解放在一个地方,并且仍然能够看到我们想要的日志,而不必遍历整个代码库和数千次抛出?

谢谢

标签: java

解决方案


我在这里看到三个选项:

  1. 使用AOP来处理MyCustomException. 按照这个答案查看如何编写类创建的方面。也可以为注解编写方面@LogMeWhenIamCreated
  2. 使用正则表达式查找所有throw new MyCustomException();结构并在投掷前添加日志记录。缺点很明显——变化很大。
  3. 按照 Rohan 的建议,将日志记录添加到MyCustomException 构造函数中。

选项 1 和 2 的缺点:如果您有构建异常的地方并且不抛出它,则仍然会添加日志消息。


推荐阅读