使用在类初始化时确定的前缀进行日志记录



我有一个模块,我正在研究它的记录器

设置如下:
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,但无法弄清楚如何在这里使用它。

我应该在我的构造函数中初始化我的记录器,我的参数都是已知的吗?这会影响静态方法中的日志记录吗?这样做是否有内存开销?

你的意思是"我研究了 mdc,但不知道如何在这里使用它。您描述的是何时要使用MDC的"典型"。您可以在请求开始时将组织名称和部门名称添加到 MDC(无论您使用的技术是什么(,然后配置您选择的日志记录框架以将组织和部门添加到输出中。您尚未提供有关正在使用的框架或配置外观的任何详细信息,但是对于Log4j 2,您将进行配置

<PatternLayout pattern="(%X{organization, division}) %msg%n"/>

假设您选择存储数据的密钥被命名为"组织"和"部门"。这将导致输出,就像上面的示例一样。

最新更新