我正在开发一个(内部)库,我想强制执行使用此库的开发人员在记录错误或致命级别消息时包含文本ID.在不修改log4j的情况下,我们要强制执行的操作类似于:
logger.error("E1234:发生了错误");
对于log4j没有或没有扩展,我们可以在夜间构建期间扫描源代码以验证是否包含文本ID,或者实现在运行时验证它的log4j appender.
但是,我们希望在error-method中添加一个额外的参数.例如:
logger.error("E1234","发生错误");
这可以通过为log4j Logger类实现一些外观类来处理.
有没有其他人有类似的问题?你的解决方案是什么?目前,我们更喜欢第一个代码示例.将来我们可以实现代码分析器在夜间构建期间执行(或者有人知道一些现有的代码分析器,可以配置为从error()方法调用中检测丢失的文本ID吗?)
避免像这样的复合键:"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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用接受错误的方法创建自己的界面:
public interface MyLogger {
void error(Error);
void info(Error);
void warn(Error);
void debug(Error);
}
Run Code Online (Sandbox Code Playgroud)
然后实现它并委托log4j真正的日志记录作业.这将有助于您的开发人员避免问题.