是否可以基于“每线程”重定向System.out
不,这是不可能的。
System.out是静态的,并且在JVM最初启动时,每个JVM都会作为系统类加载器的一部分进行加载。尽管当然建议对每个线程使用适当的日志记录调用,但是我认为有一些原因您无法执行此操作。
System.out以这种方式使用的可能是第三方库或其他代码。
您可以做的一件事(作为一个激进的建议)是使您自己的
PrintStream委派给
ThreadLocal<PrintStream>。但是您将需要
@Override应用程序调用的适当方法,以使其按线程工作。
最后,如果你问这个是因为你担心的并发,
System.out是
PrintStream所以它已经是
synchronized在幕后,并可以被多个线程安全地使用。



