我正在开发一个(内部)库,我想强制执行使用此库的开发人员在记录错误或致命级别消息时包含文本ID。在不修改log4j的情况下,我们要强制执行的操作类似于:
logger.error(“E1234:发生了错误”);
对于log4j没有或没有小扩展,我们可以在夜间构建期间扫描源代码以验证是否包含文本ID,或者实现在运行时验证它的log4j appender。
然而,我们想要的是为错误方法添加一个额外的参数。 E.g:
logger.error(“E1234”,“发生错误”);
这可以通过为log4j Logger类实现一些外观类来处理。
还有其他人有过类似的问题吗?你的解决方案是什么?目前,我们更喜欢第一个代码示例。将来我们可以实现代码分析器在夜间构建期间执行(或者有人知道一些现有的代码分析器可以配置为从error()方法调用中检测丢失的文本ID吗?)
答案 0 :(得分: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实际日志记录作业。这将有助于您的开发人员避免出现问题。