首页 > 解决方案 > Tomcat Servlet Logger 不打印所有内容

问题描述

我有一个简单的 java HTTP Servlet,它接收 XML 消息,解析它们,然后保存到数据库。一切正常;数据已正确保存到数据库,但是当有多个请求快速发送到 servlet 时,日志记录似乎无法 100% 工作。

我的日志记录只是在 doPost 方法中简单地打印出来;每个请求都有一个时间戳和一个唯一的 header-id,这样我就可以通过日志中的 header-id 进行 grep。

任何想法为什么日志不会打印出所有内容,而 servlet 正在同时处理请求。

我的问题是:

Tomcats 默认日志系统中是否有缓冲区无法处理快速到来的请求? 因为即使是不在日志中留下痕迹的请求也会以正确的信息保存到数据库中。我在一秒钟内发出了大约 400 个请求,其中一些被从日志中遗漏了(我使用 grep 进行搜索)。

我应该使用 Log4J 吗?

public class TestServlet extends HttpServlet { 

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        
        String headerID = request.getHeader("HeaderID");
        PrintWriter out = response.getWriter();
        ServletInputStream inputstream = request.getInputStream();
        
       //Printing out a timestamp and header-id as soon as doPost gets called (ie. by Postman)
        SimpleDateFormat sdf = new SimpleDateFormat("'['dd.MM.yyyy '||' HH:mm:ss.SSS']'");
        System.out.println("TIMESTAMP :: " + sdf.format(cal.getTime()) + " HEADER-ID :: " + headerID);
        try {
            //
            // Here is some logic for checking if the received XML is valid
            //
        } catch (SAXException e) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            System.out.println(
                    "ERROR " + sdf.format(cal.getTime()));
            e.printStackTrace();
        }

      // If XML is valid, then proceed to parse it to an object and save to database

      new SaveXML(inputstream, response, headerID).run();

}

标签: javatomcatloggingservlets

解决方案


推荐阅读