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月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
186 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
4月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
121 9
|
5天前
|
数据可视化 JavaScript Java
2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了!
"LikeAdmin Java是基于Spring Boot + Mybatis Plus + Vue 3的快速开发平台,内置RBAC权限管理、工作流引擎、数据可视化、三方登录等核心模块,助力开发者快速构建企业级中后台管理系统"
69 17
|
6天前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
48 17
|
1月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
131 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
99 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
87 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
108 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
16天前
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
38 9
|
4月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。

热门文章

最新文章