gpt4 book ai didi

java - 在Java中-我可以设置线程的日志级别吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:54 24 4
gpt4 key购买 nike

我一直想知道是否可以在 pr 线程级别上以编程方式设置 java.util.logging 的日志级别。

用例是在 Web 服务器中。如果我的代码检测到某个用户有异常级别的错误,我想为该客户启用跟踪日志记录。

我正在考虑使用 servletfilter 来完成此操作,并将其与他的 session ID 联系起来。但据我所知,我可以在附加程序上设置的日志级别不是线程仿射的。 IE。如果我将根级别设置为 FINE,它将影响系统中的所有线程,并且日志会填满其他 200 个同时用户的流量。当然,我可以事后过滤日志,但无论如何都会影响性能。

有人有这方面的经验吗?

最佳答案

I always wondered if it would be possible to programatically set the log level of java.util.logging on a pr thread level.

创建 log filter捕获用户上下文并将过滤对象的级别设置为 ALL:

   public class UserFilter implements Filter {

private final Level lvl;
private final Object userContext;

public UserFilter(Level originalLevel, Object userContext) {
this.lvl = originalLevel;
this.userContext = userContext;
}

@Override
public boolean isLoggable(LogRecord record) {
if (!belongsTo(record, userContext)) {
int levelValue = this.lvl.intValue();
if (record.getLevel().intValue() < levelValue
|| levelValue == Level.OFF.intValue()) {
return false;
}
}
return true;
}


private boolean belongsTo(LogRecord record) {
/**
* Insert logic here.
*/
//return ((Integer) this.userContext) == record.getThreadId();
return true;
}
}

对于您的用例,您应该能够创建一个 servlet 过滤器,它将:

  1. 创建一个日志过滤器,用于识别用户并捕获当前日志级别。
  2. 安装日志过滤器,然后将级别更改为 FINE。

关于java - 在Java中-我可以设置线程的日志级别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797281/

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