Java 如何临时将字段线程设置为本地
我的类是这样的,基本上我正在编写一个servlet,我想更改连接到我的servlet的特定用户的日志级别,并保留其他用户的其他日志设置不变,因为服务器将生成一个线程来服务一个客户机,我正在编写仅使用线程的演示代码Java 如何临时将字段线程设置为本地,java,multithreading,logging,Java,Multithreading,Logging,我的类是这样的,基本上我正在编写一个servlet,我想更改连接到我的servlet的特定用户的日志级别,并保留其他用户的其他日志设置不变,因为服务器将生成一个线程来服务一个客户机,我正在编写仅使用线程的演示代码 public Class A implements Runnable { Logger myLogger = new Logger(); @Override public void run() { if (Thread.currentThrea
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"));
}
}
}
公共类A实现可运行{
私有静态最终ThreadLocal记录器=新ThreadLocal(){
//返回所需的记录器
}
@凌驾
公开募捐{
//检查状况,必要时更换记录器
//检查特定的servlet和用户是否也
if(Thread.currentThread.getName().equals(“某物”)&&user.getId()==XX){
ConsoleAppender a=(ConsoleAppender)Logger.getRootLogger().getAppender(“标准输出”);
a、 setLayout(新的PatternLayout(“%d{HH:mm:ss}%-5.5p%t%m%n”);
}
}
}
有关更多信息:
对于线程局部状态,每个访问一个线程(通过其get或set方法)的线程都有自己的、独立初始化的变量副本