4 能否提供共享库?
由于IntelliJ IDEA并不支持动态的properties文件名称 , 如果你用动态的properties文件名称 , 就不能进行代码提示 , 查找等功能也都不能使用 , 所以必须是这种 @PropertyKey(resourceBundle = BUNDLE_FQN) 静态的properties文件名方式 。 就一个Java类 , 你就受累Copy一下这个Java类 , 毕竟是一次性的工作 , 当然你想个性化调整代码也更方便 , 如和Log4j 2.x或自定也的logging框架整合也简单些 。日志是项目最基本的需求 , 所以你创建的项目的时候 , 就把Error Code对应的代码添加到项目模板中 , 这样项目创建后就自动包含logging和error code的功能 。
5 其他的考量
原文和Reddit上相关的讨论也进行了一些整理和说明:
内外有别:如内部开发者的错误中可能会包括服务器的具体信息 , 当然给最终消费者 , 如平台的FaaS开发者 , 可能就不能输出这样的信息 , 有一定的安全风险 。小心在错误中暴露敏感数据:输出到错误日志的数据一定要进行mask , 当然也不要影响你定位错误 , 这个要看具体的场景 。不要将错误消息作为 API 契约:在API的场景中 , 响应错误有两种方式:根据错误码做响应 , 如REST API;另外一种是根据消息做出响应 , 如GraphQL , 所以这个你自行选择 。Error Code的一致性:错误消息会输出给不同的消费者 , 如REST API , 界面等 , 可能错误的提示消息有所不同 , 如国际化、脱敏等 , 但是最好都是相同的error code , 也就是front end + backend 共享相同的error code , 方便定位错误和统计 。 七 总结 采用error code + 基于properties文件存储error message , 这个设计其实就是一个综合的取舍 。 如果IDEA不能很好地支持properties文件 , 你看到一个Error Code , 不能直接定位到错误的消息 , 相反还需要跳转来跳转去找对应的消息 , 那么Enum + POJO可能就是好的选择 。 此外error code的设计也非常偏向http status code方案 , 这个也是主要基于大家对HTTP都非常熟悉 , 基本上就能猜出大概的意思 , 相反随机编码的数字就没有这方法的优势 , 要去error code中心再去查找一下 , 无形中也是浪费开发人员的时间 。
最后项目的Demo地址:http://gitlab.alibaba-inc.com/leijuan/java-error-messages-wizard 欢迎留言
[1
https://github.com/melix/jdoctor[2
https://cheatography.com/kstep/cheat-sheets/http-status-codes/[3
https://www.morling.dev/blog/whats-in-a-good-error-message/
作者 | 雷卷
本文为阿里云原创内容 , 未经允许不得转载 。
- 程序员|中美俄程序员有什么不同?美当雇佣兵、俄当黑客,中国专心赚钱!
- 核能|“小透明”饿了么:是否还能逆风翻盘?
- 美团|第三次电商革命来了,引领者可能是美团
- 软件|买Apple watch还是机械表?
- 苹果|俄罗斯的苹果设备被禁止使用了?消息是假的,均可以正常使用
- 华硕|给爸妈换手机,是换旧iPhone,还是新国产机?有什么差别?
- 江苏省|广东有格力、华为、中兴,江苏有什么?
- 机器人|特斯拉又又又涨价 等等党吐槽“还是骑共享单车吧”
- 工业互联网|买Apple watch还是机械表?
- 荣耀|小屏手机少人问津?荣耀大屏也是如此,并且价格已跌破两千元大关