命名Tomcat工作线程



是否有一种简单的方法来更改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应用程序)

最新更新