【发布时间】:2015-11-09 21:40:15
【问题描述】:
在我的 Servlet 中,我收到一个带有参数的 GET 请求。然后我尝试解码参数并记录可能的编码错误:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String json = req.getParameter("json");
try{
String jsonDecoded = java.net.URLDecoder.decode(json, "UTF-8");
} catch(UnsupportedEncodingException | IllegalArgumentException e){
// log error somewhere
}
}
问题是,代码的 try/catch 部分没有用,因为参数已经从 getParameter 函数处理,到达第 5 行的字符串已经解码。如果我使用无效参数调用 servlet,则会在 catalina.out 中记录错误,并且该变量具有空值:
Aug 17, 2015 11:22:07 AM org.apache.tomcat.util.http.Parameters processParameters
INFO: Character decoding failed. Parameter [json] with value [...] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
Note: further occurrences of Parameter errors will be logged at DEBUG level.
我想要的是将错误记录到我自己的日志中(例如,使用 log4j 处理它)。是否可以将该行日志从 catalina.out 重定向到我自己的记录器(请注意,我不想从 catalina.out 文件中记录所有日志)?作为替代方案,是否可以从 HttpServletRequest 中获取未处理的参数,然后按照我的喜好进行处理?
【问题讨论】:
标签: java tomcat servlets logging