我有一个正在使用的模块,它的记录器设置如下:
public class MyClass {
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
public MyClass(String org, String division) {
this.org = org;
this.division = division;
}
public void myMethod() {
if(blah) {
LOGGER.log("Something happened");
} else {
LOGGER.log("Something went Wrong");
}
}
}
现在,此模块正在为多个组织和部门运行,所以我的日志在Splunk中看起来像这样:
Something happened
Something went Wrong
Something happened
Something happened
Something went Wrong
没有组织或部门的信息,要解决此问题,有人开始添加addPrefix方法,如下所示:
private String addPrefix() {
return String.format("(%s, %s)", this.org, this.division);
}
以及更新的日志到LOGGER.log("{} Something happened", addPrefix());
和LOGGER.log("{} Something went wrong", addPrefix());
现在我们的日志如下:
(org1, div1) Something happened
(org1, div2) Something went Wrong
(org2, div3) Something happened
问题是,随着日志数量的增加,要维护此日志并确保每个人都将{}, addPrefix()
添加到其日志中是很痛苦的。有一个更好的方法吗?
我调查了mdc,但在这里不知道如何使用它。
是否应该在我的参数都已知的构造函数中初始化记录器?这会影响静态方法的登录吗?这样做有内存开销吗?
将记录器放入方法中,然后通过消息调用方法
public class MyClass {
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
public MyClass(String org, String division) {
this.org = org;
this.division = division;
}
public void myMethod() {
if(blah) {
log("Something happened");
} else {
log("Something went Wrong");
}
}
private void log(String message) {
LOGGER.log("({} {})) {}", this.org, this.division, message);
}
}