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日志并进行多维度分析。
相关文章
|
6天前
|
存储 Java 数据安全/隐私保护
Java的文件管理系统都有什么?
Java的文件管理系统都有什么?
30 2
|
18天前
|
监控 Java 测试技术
Java并发编程最佳实践:设计高性能的多线程系统
Java并发编程最佳实践:设计高性能的多线程系统
35 1
|
19天前
|
Rust Java 文件存储
Java系统中的错误码设计问题之通过properties文件管理Error Code如何解决
Java系统中的错误码设计问题之通过properties文件管理Error Code如何解决
29 1
|
19天前
|
安全 搜索推荐 Java
Java系统中的错误码设计问题之确保内外有别并避免暴露敏感数据如何解决
Java系统中的错误码设计问题之确保内外有别并避免暴露敏感数据如何解决
27 0
|
10天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
1天前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
8天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
6天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
7天前
|
算法 Java
Java 压缩文件
在Java中压缩文件是一个常见的需求,通常可以通过使用Java自带的`java.util.zip`包来实现。这个包提供了`ZipOutputStream`类来创建ZIP格式的压缩文件。以下是一个简单的示例,展示了如何将多个文件压缩到一个ZIP文件中。 ### 示例:将多个文件压缩到一个ZIP文件中 ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFilesExample { public static vo
|
19天前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决