2009-02-25 118 views
1

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

logger.error(“E1234:An error has occured”);

对于log4j,我们可以在每晚构建期间扫描源代码以验证是否包含文本ID,或者实现在运行时验证它的log4j appender。

但是,我们想要的是向错误方法添加额外的参数。例如为:

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

这可以通过实施一些门面类log4j的Logger类进行处理。

还有其他人有类似的问题?你的解决方案是什么?现在,我们更喜欢第一个代码示例。在未来,我们可能会执行代码分析器期间每晚构建执行(或做任何人知道这件事可以被配置为从一个错误()方法调用检测丢失的文本ID一些现有的代码分析?)

回答

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真正的日志记录作业。这将帮助您的开发人员避免问题。

+0

你不需要重写toString()吗? – 2009-02-25 14:55:24