我使用log4j2,我想为我的所有消息添加一个前缀.此前缀传递给构造函数参数,它取决于类的实例.所以我们处于对象级别(不是类或线程).
例如,我有一个A实例化的类new A(152),所以当我log.error("message")在这个类上使用时,152:就是在消息之前编写的.因为new A(155),155:将显示.
谢谢你的帮助
使用MDC来实现这一目标
在你的构造函数中
MDC.put("prefix", yourvalue);
Run Code Online (Sandbox Code Playgroud)
并在您的XML中使用它在模式中这样
%X{prefix}
Run Code Online (Sandbox Code Playgroud)
基于比尔克拉尔斯的回答:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你在你的类中设置为实例变量
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");
}
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案是包装类。
public class YourLogger
{
private Logger log;
public void error(int value, String msg)
{
log.error(String.valueOf(value) + ": " + msg);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7466 次 |
| 最近记录: |