2016-06-28 27 views
2

私は、ログファイル内でログが行われているスレッドのIDを表示しようとしています。私はコードレベルでlog.info(Thread.currentThread().getId())で "log"がLoggerクラスオブジェクトですが、これは私が正確に望むものではありません。実際、私のアプリケーションは大規模な分散アプリケーションであり、log.info("something")のコードにThread.currentThread().getId()を追加することはできません。とにかく、私は自分のlog4j.xmlファイルに変更を加えるだけで、自分のコード内のすべてのlog.infoのスレッドIDを印刷できますか?これは、今私は、私はスレッドを印刷するには、XMLの私のレイアウトで何かを追加できると仮定しています私のlog4j.xmllog4jを使用してログファイルにスレッド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> 

です。 私はまた、私はすべてのガイダンスはaprreciatedことになるだけで参照

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

のためにこれをしようとしていた中で、サンプルコードを添付しています。 ありがとう

+0

%tは** **スレッド名を印刷します。 – Fildor

+0

@Fildor。はい、それで十分です。どうもありがとうございました。 :) – Asim

答えて

6

%t ConversionPatternにスレッド名が表示されます。

スレッドIDと同じではありませんが、何もありません。コードに触れることなく動作します。それが十分である場合ConversionPatternでのlog4jで

関連する問題