gpt4 book ai didi

java - 如何临时将现场线程设为本地

转载 作者:行者123 更新时间:2023-12-02 05:48:55 26 4
gpt4 key购买 nike

我的类是这样的,基本上我正在编写一个servlet,并且我想更改连接到我的servlet的特定用户的日志级别,并保持其他用户的其他日志设置不变,因为服务器将产生一个线程为了服务一个客户,我正在编写仅使用线程的演示代码

public Class A implements Runnable {
Logger myLogger = new Logger();

@Override
public void run() {
if (Thread.currentThread.getName()).equals("something") {
// some code that makes myLogger thread-local so I can change
// myLogger settings without affecting other threads
}
myLogger.debug("some debug information");
}
}

有什么想法吗?

最佳答案

似乎可以这样完成

 public Class A implements Runnable {
private static final ThreadLocal<Logger> logger = new ThreadLocal<Logger>(){
//return your desired logger
}

@Override
public void run() {
//check condition and change logger if required
//check if that particular servlet and user also
if (Thread.currentThread.getName().equals("something") && user.getId() ==XX) {
ConsoleAppender a = (ConsoleAppender) Logger.getRootLogger().getAppender("stdout");
a.setLayout(new PatternLayout("%d{HH:mm:ss} %-5.5p %t %m%n"));
}
}
}

了解更多信息: When and how should I use a ThreadLocal variable?

java doc for Thread Local 指出每个访问一个线程(通过其 get 或 set 方法)都有自己的、独立初始化的变量 more 的副本。 .

关于java - 如何临时将现场线程设为本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748583/

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