2014-01-27 35 views
0

我有java類,它在java中使用線程。目前我正在使用兩個線程,我希望每個線程都將它的日誌寫入它自己的日誌文件中。我爲此使用了log4j。但是我的java程序正在向我顯示一個不正常的行爲。我能夠創建兩個不同的日誌文件,但我可以看到,在我的第一個日誌文件中,有來自線程一或兩個日誌記錄消息,而在第二個日誌文件中,只有第二個線程消息存在,但我想單獨記錄兩個線程。記錄不同日誌文件中的線程

這裏是我的線程文件

public class MainController extends Thread{ 
public static synchronized void main(String args[]) 
{ 
    ServerAccess t1=new ServerAccess("IP","root","zoomcallrec","cat /var/log/callrec/core1.log","com.ef.ThreadOne","Thread One"); 
    ServerAccess t2=new ServerAccess("IP","root","zoomcallrec","cat /var/log/callrec/core1.log","com.ef.ThreadTwo","Thread Two"); 
    t1.start(); 

    t2.start(); 
} 
} 

這裏是我的log4j文件

log4j.logger.com.ef.ThreadOne=DEBUG, ThreadFirst 

log4j.appender.ThreadFirst=org.apache.log4j.RollingFileAppender 
log4j.appender.ThreadFirst.File=C:/AnalyzerLog/ThreadOne/Analyzer.log 
log4j.appender.ThreadFirst.MaxFileSize=1000KB 
log4j.appender.ThreadFirst.MaxBackupIndex=10 
log4j.appender.ThreadFirst.layout=org.apache.log4j.PatternLayout 
log4j.appender.ThreadFirst.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n 

log4j.logger.com.ef.ThreadTwo=DEBUG, ThreadTwo 

log4j.appender.ThreadTwo=org.apache.log4j.RollingFileAppender 
log4j.appender.ThreadTwo.File=C:/AnalyzerLog/ThreadTwo/Analyzer.log 
log4j.appender.ThreadTwo.MaxFileSize=1000KB 
log4j.appender.ThreadTwo.MaxBackupIndex=10 
log4j.appender.ThreadTwo.layout=org.apache.log4j.PatternLayout 
log4j.appender.ThreadTwo.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n 

這是一些我的程序產生我的日誌文件。這是一個正在生成日誌都線程1和線程的線程一個日誌文件2

2014-01-24 15:24:13,688 [Thread-1] (ServerAccess.java:76) DEBUG - Server is connect 
2014-01-24 15:24:13,693 [Thread-0] (ServerAccess.java:76) DEBUG - Server is connect 
2014-01-24 15:24:14,329 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter0 
2014-01-24 15:24:14,414 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter1 
2014-01-24 15:24:14,474 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter2 
2014-01-24 15:24:14,534 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter3 
2014-01-24 15:24:14,545 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter0 
2014-01-24 15:24:14,589 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter4 
2014-01-24 15:24:14,635 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter1 
2014-01-24 15:24:14,639 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter5 
2014-01-24 15:24:14,695 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter2 
2014-01-24 15:24:14,724 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter6 
2014-01-24 15:24:14,755 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter3 
2014-01-24 15:24:14,809 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter7 
2014-01-24 15:24:14,811 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter4 
2014-01-24 15:24:14,861 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter5 
2014-01-24 15:24:14,895 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter8 
2014-01-24 15:24:14,947 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter6 
2014-01-24 15:24:14,957 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter9 
2014-01-24 15:24:15,019 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter10 
2014-01-24 15:24:15,032 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter7 
2014-01-24 15:24:15,079 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter11 
2014-01-24 15:24:15,120 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter8 
2014-01-24 15:24:15,139 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter12 
2014-01-24 15:24:15,180 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter9 
2014-01-24 15:24:15,194 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter13 
2014-01-24 15:24:15,241 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter10 
2014-01-24 15:24:15,281 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter14 
2014-01-24 15:24:15,301 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter11 
2014-01-24 15:24:15,362 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter12 
2014-01-24 15:24:15,367 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter15 
2014-01-24 15:24:15,417 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter16 
2014-01-24 15:24:15,417 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter13 
2014-01-24 15:24:15,503 [Thread-1] (ServerAccess.java:97) DEBUG - Thread isThread TwoCounter17 
2014-01-24 15:24:15,504 [Thread-0] (ServerAccess.java:97) DEBUG - Thread isThread OneCounter14 

這裏是一個正在生成日誌,只是爲了他自己的線程的線程2日誌文件

2014-01-27 10:56:56,582 [Thread-1] (ServerAccess.java:77) DEBUG - Server is connect 
2014-01-27 10:56:56,774 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter0 
2014-01-27 10:56:56,897 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter1 
2014-01-27 10:56:56,957 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter2 
2014-01-27 10:56:57,017 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter3 
2014-01-27 10:56:57,072 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter4 
2014-01-27 10:56:57,122 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter5 
2014-01-27 10:56:57,207 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter6 
2014-01-27 10:56:57,292 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter7 
2014-01-27 10:56:57,380 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter8 
2014-01-27 10:56:57,440 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter9 
2014-01-27 10:56:57,500 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter10 
2014-01-27 10:56:57,560 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter11 
2014-01-27 10:56:57,620 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter12 
2014-01-27 10:56:57,686 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter13 
2014-01-27 10:56:57,771 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter14 
2014-01-27 10:56:57,856 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter15 
2014-01-27 10:56:57,906 [Thread-1] (ServerAccess.java:98) DEBUG - Thread isThread TwoCounter16 

回答

0

我不不認爲log4j支持這種分離。你應該考慮logback框架(無論如何,log4j已被棄用)。 Logback附帶一個用於日誌分離的SiftingAppender。欲瞭解更多信息:http://logback.qos.ch/manual/loggingSeparation.html

使用此SiftingAppender與您的線程ID作爲鑑別器應該不是很難。

0

當你實例化對象ServerAccess,給他們的記錄,你希望他們使用像這樣:

public class MainController { static void main (String[] args){ Logger l1 = Logger.getLogger("log4j.logger.com.ef.ThreadOne"); Logger l2 = Logger.getLogger("log4j.logger.com.ef.ThreadTwo"); ServerAccess t1 = new ServerAccess(l1); ServerAccess t2 = new ServerAccess(l2); t1.start(); t2.start(); }

然後,內ServerAccess,使用記錄器,像這樣:

public class ServerAccess extends Thread { private final Logger logger; public ServerAccess(Logger logger){ this.logger = logger; } public void Start() { logger.debug("Debug Statement"); } }

相關問題