2017-04-14 5 views
2

私のlog4jsログにPIDを含める必要があります。スレッドコンテキストを使用する多くの例があります。ただし、作成される個々のスレッドごとにこれらを設定する必要があります。私はこれに反対して拘束されています。スレッドコンテキストを使用せずにlog4j2にPIDを記録する

私は、スレッドコンテキストを使用しないか、または任意のクラスから作成される可能性のあるスレッドに対して、すべてのスレッドコンテキストでPIDを設定できる解決策が必要です。

+0

次の機能リクエストが追加されました:https://issues.apache.org/jira/browse/LOG4J2-1884 – Matt

答えて

2

Log4j2 issue trackerに機能要求を作成して、組み込み機能にしてください。

今のところ、カスタムプラグインを作成できます。以下のコードを参照してください。これにより、pattern layout%pidを指定することができます(メッセージの場合は%mに似ています)。

import org.apache.logging.log4j.core.LogEvent; 
import org.apache.logging.log4j.core.config.plugins.Plugin; 

@Plugin(name = "ProcessIdPatternConverter", category = "Converter") 
@ConverterKeys({ "pid", "processId" }) 
public final class ProcessIdPatternConverter extends LogEventPatternConverter { 
    private final String pid; 

    private ProcessIdPatternConverter(String[] options) { 
     super("Process ID", "pid"); 
     String temp = options.length > 0 ? options[0] : "???"; 
     try { 
      // likely works on most platforms 
      temp = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; 
     } catch (final Exception ex) { 
      try { 
       // try a Linux-specific way 
       temp = new File("/proc/self").getCanonicalFile().getName(); 
      } catch (final IOException ignoredUseDefault) {} 
     } 
     pid = temp; 
    } 

    /** 
    * Obtains an instance of ProcessIdPatternConverter. 
    * 
    * @param options users may specify a default like {@code %pid{NOPID} } 
    * @return instance of ProcessIdPatternConverter. 
    */ 
    public static ProcessIdPatternConverter newInstance(final String[] options) { 
     return new ProcessIdPatternConverter(options); 
    } 

    @Override 
    public void format(final LogEvent event, final StringBuilder toAppendTo) { 
     toAppendTo.append(pid); 
    } 
} 

はどのようにLog4j2プラグインの作業の詳細についてはmanualを参照してください。 Log4j2があなたのプラグインを認識させるために

一つの方法は、構成のpackages属性にプラグインクラスのパッケージ名を指定することにより、次のとおりです。

<Configuration status="trace" 
    packages="com.myorg.mypluginpackage"> 

(トレースは、トラブルシューティングを支援するLog4j2内部デバッグに切り替わります。)

+0

これは役に立ちましたか? –

+0

はい、答えを編集して、新しいクラスのパッケージをlog4j2.xml設定に追加する方法についての情報を含めてください。 – ds390s

+0

ありがとうございました。受け入れられupvoted – ds390s

関連する問題