2015-09-07 101 views
0

有一個班級A和一個班級B,他們都在班級的幫助下使用班級C.類A和類B需要在不同的文件中生成自己的文件,例如:類A在「log_B.log」中生成日誌文件「log_A.log」和類B - 。如何記錄兩個班級使用的總體班級

我的問題是 - 如何寫一個類C的日誌accoerding調用類C的方法的類?我的意思是:如果從類A中調用類C的方法,則應該生成類C的日誌以記錄類A的日誌文件 - 「log_A.log」。如果從類B調用類C的方法,則應生成類C的日誌以記錄「log_B.log」。還有一件事別人 - 日誌記錄級別爲C級應該是相同的,作爲A類的記錄器或B.

例如,A類:

//loggerA - it's logger that writes to file "log_A.log" 
private static final Logger log = Logger.getLogger("loggerA"); 
public void method(){ 
    log.debug("Write to log of class A"); 
    C c = new C(); 
    c.method(); //activity in class C should be written to "log_A.log" as well 
} 

在B類:

private static final Logger log = Logger.getLogger("loggerB"); 
public void method(){ 
    log.debug("Write to log of class B"); 
    C c = new C(); 
    c.method(); //activity in class C should be written to "log_B.log" as well 
} 

在類C:

private static final Logger log = Logger.getLogger(???); 
public void method(){ 

    log.debug("Any log message"); 

} 

PS我使用log4j的1.2.16

我可以嘗試做如下: 在C類:

public void method(String logger){ 
    final Logger log = Logger.getLogger(logger); //Use the logger of calling class 
    log.debug("Any log message"); 

} 

但我認爲這是

回答

2

髒決定創建C類的構造函數這需要作爲記錄器參數。 現在,而在其他任何類實例C,傳遞類的記錄器C. 喜歡的東西 -

class C { 
    public C(Logger log) { 
     this.log = log; 
    } 
} 

,然後在A或B,使用它像 -

C c = new C(this.log); 
c.method(); 
+0

可以消除靜電keywork來自C的記錄器。它沒有意義,因爲我們每個實例需要不同的記錄器。事實上保持靜態將會產生問題,因爲其他實例的記錄器將被修改。 –