Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 如何临时将字段线程设置为本地_Java_Multithreading_Logging - Fatal编程技术网

Java 如何临时将字段线程设置为本地

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

我的类是这样的,基本上我正在编写一个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"));
       }
     }
  }
公共类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方法)的线程都有自己的、独立初始化的变量副本