2

私は以下に示すようにこのプログラムを持っていますが、現在はスタックトレースのみを出力しています。私の質問は、スタック トレースとカスタム フィールドを取得することは可能かということです。ここでは、1090099 が必要です。

可能か教えてください??

package com;
import org.apache.log4j.Logger;
public class Test {

    private static final Logger logger = Logger.getLogger(Test.class);
    public static void main(String args[]) {
        try {
    String accountid = "1090099";
            String desc = null;
            System.out.println(desc.toUpperCase());
            } 
            catch (Exception t) 
        {
            logger.fatal("Exception inside the Test program  ", t);
        }
    }
}

2013-06-26 21:44:29,723[main] FATAL(Test.java:<main>:16)- Exception inside the Test program
java.lang.NullPointerException
    at com.Test.main(Test.java:12)
4

5 に答える 5

2

ログに記録しているメッセージに手動で含める必要があります。しかし、あなたが本当に探しているのはMDC (マップされた診断コンテキスト) のように見えます。これは、異なるアプリケーションに関連するログ メッセージを区別するために使用できる、スレッド ローカルの「コンテキスト」に値を格納する方法です。レベルのエンティティ。

package com;
import org.apache.log4j.*;
public class Test {

    private static final Logger logger = Logger.getLogger(Test.class);
    public static void main(String args[]) {
        MDC.put("accountid", "1090099");
        try {
            String desc = null;
            System.out.println(desc.toUpperCase());
            } 
            catch (Exception t) 
        {
            logger.fatal("Exception inside the Test program  ", t);
        } finally {
            MDC.remove("accountid");
        }
    }
}

次に、%X{accountid}アペンダーのレイアウト パターンのどこかに含め、呼び出したサードパーティ コードによってログに記録されたものを含め、すべてのログ メッセージに適切な MDC エントリを含めます。

于 2013-06-26T16:44:36.053 に答える
0

はい、スコープ内にある限り、値を出力できます。

String accountid = null;
try {
     accountid = "1090099";
     String desc = null;
     System.out.println(desc.toUpperCase());
 } catch (Exception t) {
     logger.fatal("Exception inside the Test program  " + accountid, t);
 } 

また、他のロギング呼び出しには、system.out.println の代わりに logger.debug を使用することをお勧めします...

于 2013-06-26T16:39:50.050 に答える
0

あなたはそれを達成することに近づいています。

あなたの場合、ブロックのaccountid外側を宣言する必要があり、メッセージとともに追加できます`tryaccountidException inside the Test program

于 2013-06-26T16:39:23.920 に答える
0
String accountid = ""; 

try {
        accountid = "1090099";
        String desc = null;
        System.out.println(desc.toUpperCase());
    } 
        catch (Exception t) 
    {
        logger.fatal("Exception inside the Test program.\nAccount ID: " + accountid, t);
    }
于 2013-06-26T16:44:46.530 に答える