2012-11-21 60 views
1

我不確定這是否可能,但我希望能夠使用log4j註銷數據。但是,而不是log.info()語句的實際位置,我寧願將調用函數的方法名稱,行等由log4j顯示在普通字段中,而不是日誌數據。如何覆蓋Log4J行號

是否有可能覆蓋日誌事件的數據字段?

public class Foo 
{ 
    public static void info(String msg) 
    { 
     Logger aLogger = Logger.getRootLogger(); 

     // -- Set the calling function location info here 

     aLogger.info(msg); 
    } 
} 


public class Bar 
{ 
    public void test() 
    { 
     Foo.info("x"); // -- Want this line, file, class, method logged 
    } 
} 
+0

你有沒有考慮過使用[diagnostic context](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html)?不完全是你要求的,但可以解決你的目的。 – durron597

+0

我沒有,但我會研究它。 – zappullae

+0

如果你想'info()'方法來做到這一點。你可以覆蓋它。因爲這通常不是'info()'的作用 –

回答

0

我不完全相信我遵循你正在做的事情,但它聽起來像AspectJ可以幫助你的問題。

如果您要創建一個將調用包裝到記錄器方法的方面,您將能夠提取調用者的方法/類並覆蓋發送到實際記錄器的任何參數(使用ProceedingJoinPoint)。

我不完全確定Log4j在哪裏可以指定自己的行號,類信息等,但我認爲某些地方必須存在。否則,您必須編寫自己的記錄器實現,以便指定該信息。