【问题标题】:When to use logger during Exceptionhandling?异常处理期间何时使用记录器?
【发布时间】:2018-03-29 07:08:21
【问题描述】:

我是 Java 新手,不知道何时使用记录器。例如,当我在以下示例中使用记录器时是否合乎逻辑。怎么说“好的,我应该在这里使用记录器”。需要明确的是,我不是在问我应该使用哪个记录器,而是我应该使用记录器吗?

 public boolean isValid(Object bean, ConstraintValidatorContext ctx) {
        try {
            if (Assert.isNull(bean)) {
                throw new NullPointerException(EXC_MSG_BEAN_NULL);
            }

            String dependentFieldActualValue;
            dependentFieldActualValue = BeanUtils.getProperty(bean, dependentField);
            boolean isActualEqual = stringEquals(dependentFieldValue, dependentFieldActualValue);

            if (isActualEqual == ifInEqualThenValidate) {
                return true; // The condition is not met => Do not validate at all.
            }
            return isTargetValid(bean, ctx); // Perform the actual validation on the target field
        } catch (ReflectiveOperationException e) {
            throw new RuntimeException(e);
        }
    }

【问题讨论】:

  • 在例外?不是。在异常处理期间:当您想要记录出错原因时。
  • 如果您重新抛出异常,则不需要在 catch 块中添加日志记录,因为希望捕获重新抛出异常的代码会为您记录它,并且由于您确实为重新抛出的异常提供了对原始异常的引用,因此以后的日志记录将包括两者。
  • 但是我告诉这里我告诉bean不能为空,我应该在这里也写logger吗?throw new NullPointerException(EXC_MSG_BEAN_NULL);
  • @MertYücel 不。让捕获异常的代码记录它。在异常中包含足够有用的信息,即相关参数和/或值。

标签: java exception logging exception-handling


【解决方案1】:

记录器是使用的好习惯。它们用于在不使用调试器或在生产环境中找出问题所在和位置。 例如,当您对函数中作为参数传入的值有疑问并且想要检查是否传递了正确的值时,您可以在调试级别记录该值,以便确保正确值被传递,如果没有,那么你可以纠正它。

【讨论】:

  • 这很好地解释了记录器是什么,但它实际上并没有回答问题。
  • 好的。让我再尝试一次。假设您在生产环境中运行代码,不幸的是,出现了错误。现在,您还没有放置记录器,很难知道错误发生的时间点。现在,在哪里使用记录器:我们在进入函数、退出函数、调用另一个函数之前、返回之前等放置记录器,以便检查程序运行到哪一点成功。但是我们不需要在 catch 块中或在抛出异常之前使用它。希望对您有所帮助。
  • "现在,你还没有放置记录器,很难知道错误发生的时间点。"并不真地。堆栈跟踪将直接指向我们需要知道的内容
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 2019-11-12
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多