[英]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"));
}
}
好處:
%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.