2016-06-28 3 views
2

로그 파일에서 로깅이 수행되는 스레드의 ID를 인쇄하려고합니다. 나는 코드 레벨에서 log.info(Thread.currentThread().getId())로 "log"가 Logger 클래스 객체이지만 정확히 내가 원하는 것은 아니다. 사실 내 응용 프로그램은 대규모 분산 응용 프로그램이므로 log.info("something") 코드에 Thread.currentThread().getId()을 추가 할 수 없습니다. 어쨌든 log4j.xml 파일에 어떤 변경을 가할 수 있으며 내 코드의 모든 log.info에 대한 스레드 ID를 인쇄 할 수 있습니까? 이 log4j를 사용하여 로그 파일에 스레드 ID를 인쇄하십시오.

<log4j:configuration debug="true"> 
<!-- File Appenders --> 

<appender name="EventsAndErrorsFileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="EventsAndErrors.xml" /> 
    <param name="Datepattern" value="'.'yyyy-MM-dd-HH" /> 
    <param name="MaxFileSize" value="1000KB" /> 
    <param name="MaxBackupIndex" value="140" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%C] %m%n" /> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="INFO" /> 
     <param name="LevelMax" value="ERROR" /> 
    </filter> 
</appender> 

<root> 
    <priority value="debug" /> 
    <appender-ref ref="EventsAndErrorsFileAppender" /> 
    <appender-ref ref="ExceptionFileAppender" /> 
</root> 

지금 내가 스레드를 인쇄 할 XML로 내 레이아웃에 무언가를 추가 할 수 있다고 가정하고 내의 log4j.xml입니다. 나는 또한 단지 참조

import org.apache.log4j.Logger; 

class MyThread extends Thread implements MyInterface 
    { 
    public void run() 
    { 
    int i = 0; 
    while(i < 10) 
    { 
     System.out.println(Thread.currentThread().getId()+"In first  thread"); 
     log.info(Thread.currentThread().getId()); 
     log.error(Thread.currentThread().getId()); 
     System.out.println(); 
     i++; 
    } 

    } 
} 
class MyThread1 extends Thread implements MyInterface 
{ 

public void run() 
{ 
    int i = 0; 
    while(i < 10) 
    { 
     System.out.println(Thread.currentThread().getId()+"In secound thread"); 
     log.info(Thread.currentThread().getId()); 
     log.debug("debug"); 
     System.out.println(); 
     i++; 
    } 
} 
} 

public class MyClass implements MyInterface 
{ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 


    MyThread thread1 = new MyThread(); 
    MyThread1 thread2 = new MyThread1(); 


    log.info("logging stareted"); 
    thread1.start(); 
    thread2.start(); 
} 
} 

모든 안내를하는 난이 시도하고있는 샘플 코드를 부착하고는 aprreciated 될 것이다. 감사 함

+0

%의 t는 스레드 ** ** 이름을 출력 할 것이다. – Fildor

+0

@Fildor. 예, 충분합니다. 고맙습니다. :) – Asim

답변

6

%t ConversionPattern에 스레드 이름이 표시됩니다.

스레드 ID와 같지 않지만 코드를 건드리지 않고 작동합니다. 즉 충분한 경우들 - ConversionPattern에서 log4j에있어서

관련 문제