Java:使用Log4j2记录多线程
假设我有三个类A、B和C,它们分别在不同的线程(tA、tB和tC)中工作,并且它们都有自己的Java:使用Log4j2记录多线程,java,multithreading,sorting,log4j2,Java,Multithreading,Sorting,Log4j2,假设我有三个类A、B和C,它们分别在不同的线程(tA、tB和tC)中工作,并且它们都有自己的记录器实例 现在我在输出中弄得一团糟,因为三个类的日志没有顺序。是否有可能按外观顺序对日志进行排序 例如: class A { public static final Logger LOGGER = LoggerFactory.getLogger(A.class); public void start() { LOGGER.info("TestA"); L
记录器实例
现在我在输出中弄得一团糟,因为三个类的日志没有顺序。是否有可能按外观顺序对日志进行排序
例如:
class A {
public static final Logger LOGGER = LoggerFactory.getLogger(A.class);
public void start() {
LOGGER.info("TestA");
LOGGER.info("TestA");
LOGGER.info("TestA");
}
}
class B {
public static final Logger LOGGER = LoggerFactory.getLogger(B.class);
public void start() {
LOGGER.info("TestB");
LOGGER.info("TestB");
LOGGER.info("TestB");
}
}
class A {
public static final Logger LOGGER = LoggerFactory.getLogger(C.class);
public void start() {
LOGGER.info("TestC");
LOGGER.info("TestC");
LOGGER.info("TestC");
}
}
输出:
TestA
TestA
TestB
TestB
TestA
TestC
TestC
TestB
TestC
我想要的是:
TestA
TestA
TestA
TestB
TestB
TestB
TestC
TestC
TestC
由于日志记录定义上是基于时间的,所以认为您可以实现这样的目标(当然,不需要额外的工作)是没有意义的
您可以做的是将添加到日志布局中。然后,您可以使用其他工具(例如,grep
)来隔离您希望查看的特定线程的日志记录,甚至可以根据线程ID对日志进行排序,从而按顺序为每个线程提供日志。没有顺序是什么意思?你不在日志输出中添加时间戳吗?根据定义,线程彼此异步运行,这就是它们的目的。请发布一个输出示例,以及您希望输出显示的方式。如果您的要求是串行执行,因此需要串行日志,则不要使用线程,按顺序执行它们,如new A().start();新建B().start()
依此类推