作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的类是这样的,基本上我正在编写一个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/
我是一名优秀的程序员,十分优秀!