Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用Log4j2记录多线程_Java_Multithreading_Sorting_Log4j2 - Fatal编程技术网

Java:使用Log4j2记录多线程

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

假设我有三个类A、B和C,它们分别在不同的线程(tA、tB和tC)中工作,并且它们都有自己的
记录器实例

现在我在输出中弄得一团糟,因为三个类的日志没有顺序。是否有可能按外观顺序对日志进行排序

例如:

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()
依此类推