Java中如何将多字段设置日志合并为单行输出?
问题:合并Java字段设置日志为单行输出
现有Java代码逻辑为:从请求payload中获取Information数据,为OrgMap对象设置各非空字段,每个字段设置成功后单独输出一条日志(当前为多行形式)。需求是将所有成功设置的字段合并为单行日志,格式示例:FirstName,LastName,Gender,DOB 已在orgTable中设置
原有代码及日志情况
原有设置代码
OrgMap org = new OrgMap(); Information info = request.Information().get(0); // 从payload获取数据 if (info.getFirstName() != null) { org.setFirstName(info.getFirstName()); log.info("firstname has set in orgTable"); } if (info.getPatientMiddleName() != null) { org.setMiddleName(info.getMiddleName()); log.info("firstname has set in orgTable"); // 原代码存在日志内容错误 } if (info.getPatientLastName() != null) { org.setLastName(info.getLastName()); log.info("LastName has set in orgTable"); } if (info.getDOB() != null) { // 原代码变量名tInfo修正为info org.setDob(info.getDOB()); log.info("DOB has set in orgTable"); } if (info.getGender() != null) { // 原代码变量名patientInfo修正为info org.setGender(info.getGender()); // 原代码变量名orgPatient修正为org log.info("Gender has set in orgTable"); }
当前日志输出(多行)
firstname has set in orgTable LastName has set in orgTable Gender has set in orgTable DOB has set in orgTable
期望日志输出(单行)
FirstName,LastName,Gender,DOB 已在orgTable中设置
实现方案
核心思路是先收集所有成功设置的字段名,最后统一输出单行日志,具体实现如下:
修改后的代码
OrgMap org = new OrgMap(); Information info = request.Information().get(0); List<String> setFields = new ArrayList<>(); if (info.getFirstName() != null) { org.setFirstName(info.getFirstName()); setFields.add("FirstName"); } if (info.getPatientMiddleName() != null) { org.setMiddleName(info.getMiddleName()); setFields.add("MiddleName"); } if (info.getPatientLastName() != null) { org.setLastName(info.getLastName()); setFields.add("LastName"); } if (info.getDOB() != null) { org.setDob(info.getDOB()); setFields.add("DOB"); } if (info.getGender() != null) { org.setGender(info.getGender()); setFields.add("Gender"); } // 统一输出单行日志 if (!setFields.isEmpty()) { String fieldStr = String.join(",", setFields); log.info("{} 已在orgTable中设置", fieldStr); }
代码说明
- 用
ArrayList收集字段名,避免频繁字符串拼接带来的性能损耗; - 使用
String.join()方法快速将集合元素拼接为逗号分隔的字符串; - 最后判断集合非空才输出日志,避免没有字段设置时输出空日志;
- 修正了原代码中变量名不一致、日志内容错误的问题。
内容的提问来源于stack exchange,提问作者dracile
相关产品推荐
相关产品推荐

