1

我正在开发一个(内部)库,我想强制使用此库的开发人员在记录错误或致命级别消息时包含文本 ID。在不修改 log4j 的情况下,我们要强制执行的内容类似于:

logger.error("E1234: 发生错误");

如果没有或只对 log4j 进行少量扩展,我们可以在夜间构建期间扫描源代码以验证是否包含文本 ID,或者实现在运行时验证它的 log4j 附加程序。

然而,我们想要的是在错误方法中添加一个额外的参数。例如:

logger.error("E1234", "发生错误");

这可以通过为 log4j Logger 类实现一些外观类来处理。

有没有其他人有类似的问题?你的解决方案是什么?现在,我们更喜欢第一个代码示例。将来我们可能会实现代码分析器以在夜间构建期间执行(或者是否有人知道一些现有的代码分析器可以配置为从 error() 方法调用中检测丢失的文本 ID?)

4

1 回答 1

6

避免使用这样的复合键:“E1234:发生错误”

我会用

public enum Error {
 E1234("E1234", "An error has occured"),
 E1245("E1235", "Other error has occured"),
 private final String code;
 private final String description;
 Error(code, description) {
   this.code;
   this.description = description
 }
 @Override
 public String toString() {
   return this.code + ": " + this.description;
 }
}

然后,您可以使用接受错误的方法创建自己的接口:

public interface MyLogger {
 void error(Error);
 void info(Error);
 void warn(Error);
 void debug(Error);
}

然后实现它并委托给 log4j 真正的日志记录作业。这将帮助您的开发人员避免问题。

于 2009-02-25T14:48:12.890 回答