2

私のログはgetParam()メソッドで発生します。しかし、それはmainメソッドとして記録されます。また、3 つのオブジェクトがありますが、どのオブジェクトがログを記録しているかに関する情報が表示されません。私もその情報が欲しいです。

出力は次のとおりです。

INFO  [main]: info
INFO  [main]: debug
INFO  [main]: trace

コードは次のとおりです。

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

class Log4jTest {

    private static Logger log=Logger.getLogger(Log4jTest.class);
    private String param;

    public Log4jTest(String param){
        this.param=param;
    }

    public String getParam(){
        log.info(param);
        return param;
    }

}

public class Log4j_testing {
    public static void main(String[] args) throws FileNotFoundException{
        Log4jTest l1= new Log4jTest("info");
        l1.getParam();
        Log4jTest l2= new Log4jTest("debug");
        l2.getParam();
        Log4jTest l3= new Log4jTest("trace");
        l3.getParam();
    }
}

私のlog4j.プロパティ:

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.stdout.layout.ConversionPattern=%-5p [%t]: %m%n

別のメモ: 上記のコメント行のコメントを解除し、最後の行をコメントアウトすると、

11:19:41,586  INFO Log4jTest:19 - info
11:19:41,589  INFO Log4jTest:19 - debug
11:19:41,589  INFO Log4jTest:19 - trace

ログに記録されている正しい行番号(19)を提供しますが、正しい方法ではありません。

4

3 に答える 3

11

%Mあなたのパターンに追加します。ただし、JavaDocに次のように記載されています。

于 2014-03-06T19:32:41.570 に答える
4

一部のパターンが無視されるか、ログに記録されない場合があります ( %C%F%l、)。これは、非同期ロガーと非同期アペンダーを使用する場合に当てはまります。これについて、Log4j 2.xのユーザー ガイドは次のように述べています (217 ~ 218 ページを参照)。%L%M

レイアウトの 1 つが HTML locationInfo のような場所関連の属性で構成されているか、パターン %C または %class、%F または %file、%l または %location、%L または %line、%M または % のいずれかで構成されている場合メソッドを使用すると、Log4j はスタックのスナップショットを取得し、スタック トレースをたどって位置情報を見つけます。

これはコストのかかる操作です。同期ロガーの場合は 1.3 ~ 5 倍遅くなります。同期ロガーは、このスタック スナップショットを取得する前に、可能な限り待機します。場所が必要ない場合、スナップショットは作成されません。

ただし、非同期ロガーは、ログ メッセージを別のスレッドに渡す前に、この決定を行う必要があります。それ以降は位置情報が失われます。非同期ロガーの場合、スタック トレース スナップショットの取得によるパフォーマンスへの影響はさらに大きくなります。場所を使用したロギングは、場所を使用しない場合よりも 30 ~ 100 倍遅くなります。このため、非同期ロガーと非同期アペンダーには、デフォルトで位置情報が含まれていません。

を指定することで、ロガーまたは非同期アペンダー構成のデフォルトの動作をオーバーライドできますincludeLocation="true"

于 2016-04-12T23:12:55.410 に答える