logger用{},或者用String.format("数字1:%s,和数字2:%s不一致",a,b);
例如:
private void validateRequest (LedgerCalculatorRequest request) {
List<LedgersInfoBean> ledgersInfo = request.getLedgersInfo();
BigDecimal sumReceived = ledgersInfo.stream().map(ledgersInfoBean -> new BigDecimal(ledgersInfoBean.getReceived())).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal received = new BigDecimal(request.getPaymentSubjectReceived()).add(sumReceived);
BigDecimal totalReceived = new BigDecimal(request.getTotalReceived());
if (received.compareTo(totalReceived) != 0) {
log.error("已收总金额不一致,计算所得值:{},参数值:{}", received, totalReceived);
throw new HbBusinessException("9999", String.format("已收总金额不一致,计算所得值:%s,参数值:%s", received, totalReceived));
}
BigDecimal totalReceivable = new BigDecimal(request.getTotalReceivable());
BigDecimal sumReceivable = ledgersInfo.stream().map(ledgersInfoBean -> new BigDecimal(ledgersInfoBean.getReceivable())).reduce(BigDecimal.ZERO, BigDecimal::add);
if (totalReceivable.compareTo(sumReceivable) < 0) {
log.error("已收总金额小于分账方已收金额,分账方已收金额:{},已收总金额:{}", sumReceivable, totalReceivable);
throw new HbBusinessException("9999", String.format("已收总金额小于分账方已收金额,分账方已收金额:%s,已收总金额:%s", sumReceivable, totalReceivable));
}
if (Objects.isNull(request.getPaymentSubjectReceivable())) {
request.setPaymentSubjectReceivable(totalReceivable.subtract(sumReceivable).longValueExact());
} else {
BigDecimal receivable = new BigDecimal(request.getPaymentSubjectReceivable()).add(sumReceivable);
if (receivable.compareTo(totalReceivable) != 0) {
log.error("应收总金额不一致,计算所得值:{},参数值:{}", receivable, totalReceivable);
throw new HbBusinessException("9999", String.format("应收总金额不一致,计算所得值:%s,参数值:%s", receivable, totalReceivable));
}
}
if (Objects.isNull(request.getPlannedWithhold()))
request.setPlannedWithhold(totalReceivable.subtract(totalReceived).longValueExact());
}
自定义异常类:
public class HbBusinessException extends AbstractException {
private static final long serialVersionUID = -1895606523417907168L;
@Setter
@Getter
private String code;
@Setter
@Getter
private String message;
public HbBusinessException(String code, String message) {
this.code = code;
this.message = message;
}
public HbBusinessException(ReturnCode returnCode) {
this.code = returnCode.getCode();
this.message = returnCode.getMessage();
}
public HbBusinessException(Exception e) {
super(e);
}
}
/**
* @author za-laijianbo2017年4月25日下午5:42:22
*
*/
public abstract class AbstractException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param e
*/
public AbstractException(Exception e) {
super(e);
}
/**
* @param e
*/
public AbstractException() {
}
public abstract String getCode();
public abstract String getMessage();
}
相关推荐
在C#编程语言中,字符串格式化是一种常见且重要的任务,尤其在输出信息、日志记录、用户界面显示等方面。本文将深入探讨“C#超级字符串格式化源码示例”,并提供一种自定义实现的方法,帮助初学者理解并掌握字符串...
3. **日志格式**:可以使用占位符`%s`、`%d`等来格式化日志信息,使其更易读。 4. **过滤日志**:在Android Studio的Logcat工具中,可以设置过滤器来显示特定标签或优先级的日志。 5. **Logcat限制**:系统默认...
例如,使用`print()`的`sep`和`end`参数控制间隔和行结束符,使用`format()`方法通过占位符{}和对应的键值对实现复杂的格式化。 ```python with open('output.txt', 'w') as f: f.write('{:<10}{:>10}'.format('...
在处理Microsoft Office文档,尤其是Word文档时,Java的Apache POI库是一个常用工具。Apache POI是一个开源项目,它提供了API来读取、写入和...正确理解和使用这些功能,可以帮助我们高效地完成文档的自动化处理任务。
6. **条件输出和占位符**:使用条件输出或占位符方式来输出日志,避免不必要的资源消耗。 7. **设置additivity属性**:在log4j.xml配置文件中设置additivity属性为false,避免重复打印日志。 通过遵循这些规范和...
字符串格式化方法在日常开发中广泛应用于日志记录、用户界面显示以及数据转换等多个场景。`String.Format`方法的基本语法如下: ```csharp string result = String.Format(format, arg0, arg1, ..., argN); ``` ...
首先,`参数化写入日志信息`类似于`fprint`和`printf`函数,这意味着我们可以根据需求灵活地传递变量和格式化字符串到日志系统中。这样的设计允许我们方便地记录不同类型的日志数据,如整型、浮点型、字符串等,并且...
通过分析这个文件,可以进一步了解作者是如何处理日志记录的细节,如如何处理不同日志级别、如何格式化输出、如何与文件系统交互等。然而,具体的实现方式需要查阅源代码才能得知。 总之,创建一个日志记录类并将其...
- **日志格式化**:使用模板和占位符提高日志格式的标准化,便于分析。 - **日志级别**:定义不同的日志级别(如DEBUG、INFO、WARNING、ERROR),根据需要过滤输出。 - **多线程支持**:在多线程环境中,需要确保...
日志框架通常需要配置文件来定义日志级别(如DEBUG、INFO、WARN、ERROR)、日志输出目的地(控制台、文件、网络等)、格式化方式等。例如,Logback的配置文件为`logback.xml`,而Log4j的配置文件为`log4j....
CLog还支持格式化输出,可以通过`printf`风格的占位符来插入变量。比如: ```java int value = 42; CLog.i("Tag", "The answer is %d", value); ``` 这将在日志中显示:“The answer is 42”。 在实际开发中,合理...
确保替换上述代码中的占位符为实际的阿里云Log Service的项目名、存储库名、接入点以及你的Access Key ID和Access Key Secret。 最后,在应用程序中使用Serilog记录日志非常简单,只需在需要的地方调用`Log`对象的...
如果格式化字符串中存在未匹配的占位符,这些占位符将不会被替换。值得注意的是,util.format在无法直接将非字符串参数转换为字符串时,会使用util.inspect进行处理。 util.inspect是另一个在Node.js中非常有用的...
3. **日志布局和格式化**:NLog 提供了丰富的布局选项,可以自定义日志条目的格式,包括时间戳、级别、消息模板等。同时,还支持占位符和表达式,方便在日志中嵌入变量信息。 4. **过滤和路由规则**:通过配置,...
2. 使用占位符:在记录日志时,使用占位符(如`{0}`、`{1}`)结合参数,提高日志的可读性和效率。 3. 定期清理:定期清理不再需要的日志文件,保持项目整洁。 总结,Log4在Unity3D中的应用极大地提升了开发效率和...
4. **形式化日志**: Flogger提供了对格式化日志的支持,可以使用占位符(如`%s`、`%d`)进行变量插入,并自动处理异常情况,如未捕获的异常会被自动包含在日志消息中。 5. **效率优化**: Flogger的设计充分考虑了...
`commandText`属性定义了插入语句,而`parameter`元素则定义了占位符及其对应的值。这里的模式布局(PatternLayout)用于将日志信息格式化为适合数据库字段的数据。 总结一下,Log4Net是C#开发中的强大工具,可以...
在Windows API(WinAPI)中,`Format_winapi`是一个模拟C标准库中的`printf`或`sprintf`函数的功能,用于格式化字符串输出。这个功能允许程序员根据指定的格式将数据转换为可读性强的文本,常用于日志记录、用户界面...