Jma*_*man 6 java logging logback slf4j
我有一个类在其构造函数中采用字符串参数来表示它.
我想在日志消息中附加此字符串作为前缀.我怎么能在logback中做到这一点?
例如;
MyClass classA = new MyClass("0999445454");
MyClass classB = new MyClass("0999446464");
classA.doSomething();
classB.doSomething();
Run Code Online (Sandbox Code Playgroud)
MyClass的方法;
public void doSomething() {
logger.info("Doing Something...");
//Do something
}
Run Code Online (Sandbox Code Playgroud)
所以我希望看到这样的日志消息;
[INFO] [0999445454]: Doing Something...
[INFO] [0999446464]: Doing Something...
Run Code Online (Sandbox Code Playgroud)
我不知道你当前是如何实例化你的logger
,但你可以用你的"字符串参数代表"你的对象命名这个记录器:
logger = LoggerFactory.getLogger("0999445454");
Run Code Online (Sandbox Code Playgroud)
例如,如果此字符串标识符存储在属性中id
,则可以执行以下操作:
Logger logger = null;
public MyClass(String id) {
logger = org.slf4j.LoggerFactory.getLogger(id);
// ...
}
public void doSomething() {
logger.info("Doing Something...");
// Do something
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要在Logback配置文件中使用以下Pattern:
<appender name="..." class="...Appender">
<encoder>
<pattern>[%level] [%logger]: %msg%n</pattern>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
因为%logger
是记录器名称,它是给定的参数org.slf4j.LoggerFactory.getLogger()
如果要避免Logger
为每个ID 创建一个,您还可以使用映射诊断上下文 (MDC):
logger = LoggerFactory.getLogger(MyClass.class);
org.slf4j.MDC.put("id", "your ID");
logger.info("Doing Something...");
Run Code Online (Sandbox Code Playgroud)
然后,您应%mdc
在模式中添加字段(即Logback配置文件):
<pattern>[%level] [%mdc{id}]: %msg%n</pattern>
Run Code Online (Sandbox Code Playgroud)
因此,MDC.put()
每次要使用其他ID登录时,都应在日志之前调用.在你的情况下你可以做的是:
public class MyClass {
private Logger logger = LoggerFactory.getLogger(MyClass.class);
private final String id;
private static final Object MDC_MUTEX = new Object();
public MyClass(String id) {
this.id = id;
// ...
}
public void doSomething() {
log("Doing Something...");
// Do something...
}
private void log(String message) {
synchronized(MDC_MUTEX) {
MDC.put("id", id);
logger.info(message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7466 次 |
最近记录: |