로그 파일에서 로깅이 수행되는 스레드의 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 될 것이다. 감사 함
%의 t는 스레드 ** ** 이름을 출력 할 것이다. – Fildor
@Fildor. 예, 충분합니다. 고맙습니다. :) – Asim