2009-02-25 192 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