Java系统中的错误码设计问题之实现一个基于properties文件的错误消息管理系统如何解决

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Java系统中的错误码设计问题之实现一个基于properties文件的错误消息管理系统如何解决

问题一:为什么建议不将错误消息本地化(localize)为中文,但考虑到实际情况又可以做这样的选择?


为什么建议不将错误消息本地化(localize)为中文,但考虑到实际情况又可以做这样的选择?


参考回答:

建议不将错误消息本地化为中文主要是出于通用性和国际化的考虑。然而,考虑到国内大多数程序员可能更习惯使用中文表达,并且中文描述在某些情况下可能更清晰易懂,因此可以根据实际情况选择将错误消息本地化为中文。但需要注意的是,这可能会降低代码的通用性和国际化程度。


关于本问题的更多问答可点击原文查看:

https://developer.aliyun.com/ask/674848



问题二:如何在Java中通过几行代码实现一个基于properties文件的错误消息管理系统?


如何在Java中通过几行代码实现一个基于properties文件的错误消息管理系统?


参考回答:

建议不将错误消息本地化为中文主要是出于通用性和国际化的考虑。然而,考虑到国内大多数程序员可能更习惯使用中文表达,并且中文描述在某些情况下可能更清晰易懂,因此可以根据实际情况选择将错误消息本地化为中文。但需要注意的是,这可能会降低代码的通用性和国际化程度。

import org.slf4j.helpers.MessageFormatter;  
import java.util.Locale;  
import java.util.ResourceBundle;  
public class AppErrorMessages {  
    private static final String BUNDLE_FQN = "app.ErrorMessages";  
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_FQN, new Locale("en", "US"));  
    public static String message(String key, Object... params) {  
        if (RESOURCE_BUNDLE.containsKey(key)) {  
            String value = RESOURCE_BUNDLE.getString(key);  
            final FormattingTuple tuple = MessageFormatter.arrayFormat(value, params);  
            return key + " - " + tuple.getMessage();  
        } else {  
            return MessageFormatter.arrayFormat(key, params).getMessage();  
        }  
    }  
}


关于本问题的更多问答可点击原文查看:

https://developer.aliyun.com/ask/674850



问题三:如何在日志记录时自动将错误码和对应的消息进行包装和打印?


如何在日志记录时自动将错误码和对应的消息进行包装和打印?


参考回答:

可以通过创建一个ErrorCodeLogger类来实现日志的包装,该类继承或实现日志接口(如Logger),并在其方法中通过ResourceBundle获取对应的错误消息,然后调用委托的日志记录器进行记录。示例代码如下:

import java.util.Locale;  
import java.util.ResourceBundle;  
public class ErrorCodeLogger implements Logger {  
    private Logger delegate;  
    private static final String BUNDLE_FQN = "app.ErrorMessages";  
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_FQN, new Locale("en", "US"));  
    public ErrorCodeLogger(Logger delegate) {  
        this.delegate = delegate;  
    }  
    @Override  
    public void trace(String msg) {  
        // 注意:这里msg应为错误码,实际项目中可能需要修改方法签名以支持参数  
        String errorMessage = RESOURCE_BUNDLE.getString(msg);  
        delegate.trace(errorMessage);  
    }  
    //

其他日志级别的方法(如info, error等)也需要相应实现

}注意:上述ErrorCodeLogger类的trace方法示例中,假设msg参数直接为错误码,但在实际应用中,你可能需要修改方法签名以支持传递错误码和参数,或者修改内部逻辑以适应你的具体需求。


关于本问题的更多问答可点击原文查看:

https://developer.aliyun.com/ask/674852



问题四:如何在Java中使用AppErrorMessages类来打印带有参数的错误消息?


如何在Java中使用AppErrorMessages类来打印带有参数的错误消息?


参考回答:

你可以直接调用AppErrorMessages.message方法,并传入错误码和需要替换到消息中的参数。例如:

log.info(AppErrorMessages.message("APP-100-400", "xxx@example.com"));
这将输出类似"APP-100-400 - Failed to log in system with email and password(Email login failed): can not find account with email xxx@example.com --- please refer https://example.com/login/byemail --- Solutions: 1. check your email 2. check your password"的日志信息。


关于本问题的更多问答可点击原文查看:

https://developer.aliyun.com/ask/674853



问题五:ErrorCodeLogger类如何确保只记录存在于properties文件中的错误码对应的消息?


ErrorCodeLogger类如何确保只记录存在于properties文件中的错误码对应的消息?


参考回答:

ErrorCodeLogger类在记录日志之前,应该通过ResourceBundle检查提供的错误码是否存在。如果不存在,可以选择记录一个默认的错误消息,或者抛出一个异常来指示无效的错误码。然而,上述ErrorCodeLogger的示例代码并未直接处理这种情况,因为它假设所有传入的错误码都是有效的。在实际应用中,你可能需要添加相应的逻辑来处理无效的错误码。


关于本问题的更多问答可点击原文查看:

https://developer.aliyun.com/ask/674855

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
74 9
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
1月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
17天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
80 34
|
26天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
42 3
|
1月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
96 2
|
1月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
98 3
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
58 4