有没有一种简单的方法来更改 Tomcat 为其工作线程提供的默认名称?理想情况下,我希望与某个 Web 应用程序关联的所有线程都以它们的名称命名,也许作为前缀。例如,如果我部署 app1.war 和 app2.war,我希望 app1 的所有线程的名称中都包含app1。
问问题
1169 次
2 回答
2
来自论坛,以更好的格式重新发布在这里;一个简单的过滤器,将每个线程重命名为请求 URI,在此示例中:
public class ThreadNameFilter implements javax.servlet.Filter {
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain fc) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest)req;
final Thread curThr = Thread.currentThread();
final String oldName = curThr.getName();
// change the name of the current thread to something related
// to the application (e.g. URI)
try {
curThr.setName(httpReq.getRequestURI());
fc.doFilter(req, resp);
} finally {
curThr.setName(oldName);
}
}
}
于 2012-12-27T16:59:44.700 回答
0
线程只是暂时与特定的 web 应用程序“关联”。
我无法想象为什么这会很有用:
- 记录应该包括上下文信息(例如,什么组件正在记录)
- 分析可以很容易地揭示正在执行的代码(从而揭示正在“运行”的 webapp)
- 异常包括完整的堆栈跟踪,可以揭示正在执行的代码(从而揭示正在“运行”的 webapp)
- 可以通过线程转储检查长时间运行的线程(从而揭示在长时间运行的请求中“运行”的 webapp)
于 2012-12-27T21:39:10.903 回答