是否有一种简单的方法来更改Tomcat给它的工作线程的默认名称?理想情况下,我希望与某个web应用程序相关联的所有线程在其名称中都有它,也许作为前缀。例如,如果我部署app1。战争和应用。我希望app1的所有线程的名字中都有app1
来自一个论坛,在这里以更好的格式转发;一个简单的过滤器,将每个线程重命名为请求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);
}
}
}
线程只能暂时与特定的web应用"关联"。
我无法想象为什么这将是有用的东西:
- 日志记录应该包括上下文信息(例如哪个组件正在记录)
- 分析可以很容易地显示正在执行的代码(从而显示正在"运行"的web应用程序)
- 异常包括完整的堆栈跟踪,可以显示正在执行的代码(从而显示正在"运行"的web应用程序)
- 可以通过线程转储检查长时间运行的线程(从而显示在长时间运行的请求中正在"运行"的web应用程序)