簡體   English   中英

如何為log4j消息添加前綴(在對象級別)

[英]How do I add a prefix to log4j messages (at the object level)

我使用log4j2,我想為我的所有消息添加一個前綴。 此前綴傳遞給構造函數參數,它取決於類的實例。 所以我們處於對象級別(不是類或線程)。

例如,我有一個實例化的A類,如new A(152) ,所以當我在這個類上使用log.error("message")時,就會在消息之前寫入152: log.error("message") 對於new A(155) ,將顯示155:代替。

謝謝你的幫助

使用MDC來實現這一目標

在你的構造函數中

 MDC.put("prefix", yourvalue);

並在您的XML中使用它在模式中這樣

      %X{prefix}

基於Bill Clars回答:

public class LogWrapper
{
    private Logger log;
    private String prefix;

    public LogWrapper(Logger log, String prefix) {
        this.log = log;
        this.prefix = prefix;
    }

    public void error(String msg)
    {
        log.error(prefix + ": " + msg);
    }
}

然后在類中設置為實例變量

public class MyClass {
    private LogWrapper log;

    public MyClass(int prefix) {
        log = new LogWrapper(Logger.getLogger(this.getClass()), String.valueOf(prefix));

        // then log away
        log.error("Test");
    }
}

這是一個簡單的解決方法:您可以使用為其添加前綴的方法包裝字符串,並將連接的字符串返回到error方法。

public class A {
    private static final Logger LOG = LogManager.getLogger();

    final int index;

    public A(int index) {
        this.index = index;
    }

    public static void f(String message) {
        return String.valueOf(index) + ": ";
    }

    public void method() {

        // ...

        LOG.error(f("message"));

    }

}

好處:

  • 簡單
  • 您可以在一個類/方法中使用和不使用前綴來記錄消息
  • 您不必在log4j2配置中永久添加%X{prefix}之類的內容

缺點:

  • 如果要添加前綴,則必須始終使用包裝器方法

一種解決方案是包裝類。

public class YourLogger
{
    private Logger log;

    public void error(int value, String msg)
    {
        log.error(String.valueOf(value) + ": " + msg);
    }
}

試試這個

public void writeError(String msg,int intValue) {
logger.error(intValue+" "+msg);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM