gpt4 book ai didi

java - NPE 在尝试在 Java 中创建多个记录器时使用静态 ThreadLocal 记录器

转载 作者:行者123 更新时间:2023-11-30 08:16:43 25 4
gpt4 key购买 nike

我正在尝试使用 Threadlocal 创建多个静态记录器,以便每个静态 threadlocal 将记录到具有不同消息的单独文件。下面是我的示例代码:

public class LoggerTest implements Runnable
{
private static ThreadLocal<Logger> log=new ThreadLocal<Logger>();
FileHandler fh;
String str;
public LoggerTest(int counter,String instanceName) throws SecurityException, IOException
{
str=instanceName;
log.set(Logger.getLogger("Logging"+counter));
log.get().info("m");
fh=new FileHandler(instanceName+".log");
fh.setFormatter(new SimpleFormatter());
log.get().addHandler(fh);
}
public static void main(String[] args) throws SecurityException, IOException
{
Thread t1=new Thread(new LoggerTest(1, "file"+1),"Thread1");
Thread t2=new Thread(new LoggerTest(2, "file"+2),"Thread2");
Thread t3=new Thread(new LoggerTest(3, "file"+3),"Thread3");
t1.start();t2.start();t3.start();
}

@Override
public void run()
{
for (int i = 0; i < 10; i++)
{
log.get().info("Message"+i);
try
{
Thread.sleep(5000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}

根据 this每个线程都有自己的静态 ThreadLocal 变量。所以我创建了 3 个线程来使用 ThreadLocal 登录不同的文件。有人能指出我在理解静态 ThreadLocal 的概念时哪里出错了吗

我的目标:使用静态 ThreadLocal 实现多个记录器TIA!!!

最佳答案

这是因为您需要重写ThreadLocal 类的initialValue() 方法。例如。

/** Thread local logger. */
private static final ThreadLocal<Logger> LOGGER = new ThreadLocal<Logger> () {

@Override
protected Logger initialValue() {
return LoggerFactory.getLogger(ThisClass.class);
}
};

关于java - NPE 在尝试在 Java 中创建多个记录器时使用静态 ThreadLocal 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28164506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com