java - 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();
}
解决方案
推荐阅读
- javascript - JS New Date() 返回纪元 0
- reactjs - 为什么我不能对某些 React.Components 使用 className 属性?
- google-bigquery - 在 BigQuery 中将字符串转换为日期?
- firebase - WebStorm 是否有 Firebase 存储规则语法高亮显示?
- python - Pytest lambda 处理程序传递事件和上下文
- testing - 函数调用中的测试或 clojure 中的语句未运行
- scala - scala spark UDF过滤器数组的结构
- c - sscanf 获取字符串直到第二个符号(包括一个)
- java - Eclipse 找不到可执行 Jar 的库
- c# - 在 C# 中使用构建器模式和方法链接时返回字符串