LOGGER.error(“Error message“, e) 和 LOGGER.error(“Error message“, e.getMessage()) 在打印日志时的区别

  1. 完整的异常堆栈 vs. 仅异常消息

    • LOGGER.error("Error message", e):这种方式将打印出传递给它的异常e的完整堆栈跟踪信息,包括异常的类型、消息和堆栈跟踪。这对于调试来说非常有用,因为它提供了异常发生的上下文,包括在代码的哪一行发生了异常。
    • LOGGER.error("Error message", e.getMessage()):这种方式仅打印出异常的消息部分,而不包括堆栈跟踪或异常的类型。这可能在某些情况下有用,比如当你想要一个更简洁的日志输出,或者当堆栈跟踪信息过于冗长且不需要详细调试信息时。
  2. 调试信息的详细程度

    • 使用LOGGER.error("Error message", e)能提供更多的信息,有助于开发者快速定位和解决问题。它特别适用于复杂的错误调查,其中堆栈跟踪可以指示错误的具体来源。
    • 使用LOGGER.error("Error message", e.getMessage())提供的信息较少,可能不足以完全理解错误的上下文。这种方式更适合于已知错误,或者当日志的目的是给出一个高级别的错误概述而不深入详细的堆栈信息时。
  3. 使用场景

    • 在需要详尽调试信息来诊断问题时,推荐使用LOGGER.error("Error message", e)
    • 当错误消息本身足够理解问题,或者出于性能考虑(例如,生成堆栈跟踪可能相对耗时)不需要堆栈跟踪时,可以使用LOGGER.error("Error message", e.getMessage())

结论

选择哪种日志记录方式取决于你对日志详细程度的需求。在开发和测试环境中,通常更倾向于使用LOGGER.error("Error message", e)以获取尽可能多的信息以便于调试。而在生产环境中,可能会根据性能考虑和日志的可读性,选择更加简洁的日志记录方式。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public String execute(Message msg) throws Exception { logger.info("CreateInstanceWork - execute :begin ,workId=" + msg.workId + " ,param=" + msg.param); String istanceId = null; try { CreateInstanceParam param = JSON.parseObject(msg.param, CreateInstanceParam.class); //获取镜像在ral层的真实Id Image image = computeInvokeManager.getImage(param.imageId); if(null==image){ throw new ResourceIsDeletedErrorException(); } param.imageId=image.privateId; param.macName = StringUtils.replace(param.macName, "-", ":"); //param.macName = param.fixedMac1; Instance instance = ralInvokeManager.createInstance(param); instance.vmType = param.type; instance.imageId=image.id; instance.accountName = instance.name; instance.sceneType = param.sceneType; if(StringUtils.isNotEmpty(image.name)){ instance.imageName=image.name; }else{ instance.imageName = "未知镜像-" + instance.imageId; } if(instance.osType == null){ instance.osType = INSTANCE_CONFIG.OSTYPE_WINDOWS; } instanceDao.addInstance(instance); instanceDao.initInstance(instance.id); instanceDao.lockInstance(instance.id); workRegister.updateWorkResource(msg.workId, instance.id); istanceId = instance.id; logger.info("CreateInstanceWork - execute :end ,workId=" + msg.workId + " ,instanceId=" + istanceId); } catch (BaseInvokeException e) { logger.error("CreateInstanceWork - execute : createInstance failed !", e); String message = e.getMessage(); SrvError srvError = null; try { srvError = JSON.parseObject(message, SrvError.class); } catch (Exception e1) { } if (null != srvError) { workResponser.responeWorkDetailEnd(msg.workId, srvError.code + ""); } else { workResponser.responeWorkDetailEnd(msg.workId, e.getCode() + ""); } throw e; } catch (Exception e) { logger.error("CreateInstanceWork - execute : createInstance failed !", e); throw e; } finally { } return super.execute(msg, istanceId); }这段代码是什么意思
07-14
这段代码是一个Java方法的实现,它接收一个`Message`对象作为参数,并返回一个`String`类型的结果。 代码首先通过日志记录器`logger`输出一条日志,然后定义了一个变量`istanceId`并初始化为`null`。 接下来,代码在`try`块中执行以下操作: 1. 使用`JSON.parseObject()`方法将`msg.param`参数解析为一个`CreateInstanceParam`对象,该对象中包含了一些参数信息。 2. 通过调用`computeInvokeManager.getImage()`方法获取所需镜像的真实Id,并将其赋值给`param.imageId`。如果获取到的镜像为null,则抛出一个`ResourceIsDeletedErrorException`异常。 3. 将`param.macName`中的"-"替换为":"。 4. 调用`ralInvokeManager.createInstance()`方法创建一个实例,返回一个`Instance`对象,并将其赋值给`instance`变量。 5. 设置一些实例对象的属性,如`vmType`、`imageId`、`accountName`等。 6. 调用`instanceDao.addInstance()`方法将实例对象保存到数据库中。 7. 调用其他相关方法对实例进行初始化和锁定。 8. 调用`workRegister.updateWorkResource()`方法更新工作资源。 如果在上述过程中发生了继承自`BaseInvokeException`的异常,则会记录错误日志并抛出该异常。代码会尝试解析异常消息,并根据消息内容调用不同的方法进行错误处理。最后,通过`super.execute()`方法返回一个结果。 `finally`块中没有任何代码,所以不会执行任何特定操作。 需要注意的是,这段代码只是一个片段,并没有提供完整的上下文。要完全理解代码的功能和含义,还需要了解代码中使用的其他类和方法的具体实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值