2014-01-27 2 views
0

У меня есть класс java, который использует threading в 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 поддерживает такое разделение. Вы должны рассмотреть структуру журнала (log4j все равно устарел). Logback поставляется с SiftingAppender для разделения журналов. Для получения дополнительной информации: http://logback.qos.ch/manual/loggingSeparation.html

Не так сложно использовать этот SiftingAppender с вашими идентификаторами потоков в качестве дискриминатора.

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"); } }

Смежные вопросы