javaidea日志循环
我刚刚将IDE从Eclipse更改为Idea 14,并发现了一个日志循环问题 我无法发布图片,以下是链接: 就像图片一样,继续循环大约半秒钟,就没有收入要求了 Eclipse中的相同代码也可以 web.xmljavaidea日志循环,java,eclipse,intellij-idea,Java,Eclipse,Intellij Idea,我刚刚将IDE从Eclipse更改为Idea 14,并发现了一个日志循环问题 我无法发布图片,以下是链接: 就像图片一样,继续循环大约半秒钟,就没有收入要求了 Eclipse中的相同代码也可以 web.xml <filter> <filter-name>loggingFilter</filter-name> <filter-class>com.rehulu.coreapi.service.impl.LoggingFilter<
<filter>
<filter-name>loggingFilter</filter-name>
<filter-class>com.rehulu.coreapi.service.impl.LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
日志过滤器
com.rehulu.coreapi.service.impl.LoggingFilter
日志过滤器
/*
LoggingFilter.class
public class LoggingFilter extends OncePerRequestFilter {
protected static final Logger logger = Logger.getLogger(LoggingFilter.class);
private AtomicLong id = new AtomicLong(1);
private static final String REQUEST_PREFIX = "Req:%s sId:%s Ip:%s Method:%s Uri:%s Parameter:%s";
private static final String RESPONSE_PREFIX = "Resp:";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
long requestId = id.incrementAndGet();
request = new RequestWrapper(requestId, request);
response = new ResponseWrapper(requestId, response);
try {
filterChain.doFilter(request, response);
} finally {
logRequest(request);
logResponse((ResponseWrapper) response);
}
}
private void logRequest(final HttpServletRequest request) {
StringBuilder msg = new StringBuilder();
msg.append(REQUEST_PREFIX);
HttpSession session = request.getSession(false);
String id = "";
if (session != null) {
id = session.getId();
}
String uri = request.getRequestURI();
String method = request.getMethod();
String parameter = "";
if (request instanceof HttpServletRequest && !isMultipart(request)) {
HttpServletRequest requestWrapper = (HttpServletRequest) request;
Map<String, String[]> parameters = requestWrapper.getParameterMap();
for (Entry<String, String[]> entry : parameters.entrySet()) {
String[] value = entry.getValue();
String keyV = "";
if (value == null || value.length == 0) {
continue;
} else {
if (value.length == 1) {
keyV = value[0];
} else {
keyV = Arrays.toString(value);
}
}
parameter += "{" + entry.getKey() + ":" + keyV + "}";
}
}
logger.info(String.format(REQUEST_PREFIX, String.valueOf(((RequestWrapper) request).getId()), id,
IPUtil.getClientIP(request), method, uri, parameter));
}
private boolean isMultipart(final HttpServletRequest request) {
return request.getContentType() != null && request.getContentType().startsWith("multipart/form-data");
}
private void logResponse(final ResponseWrapper response) {
StringBuilder msg = new StringBuilder();
msg.append(RESPONSE_PREFIX).append((response.getId()));
try {
String contentType = response.getContentType();
if (contentType != null && contentType.contains("json")) {
msg.append(" Payload:").append(new String(response.toByteArray(), response.getCharacterEncoding()));
} else {
msg.append(" Content-Type:").append(contentType);
}
} catch (UnsupportedEncodingException e) {
logger.warn("Failed to parse response payload", e);
}
logger.info(msg.toString());
}
公共类LoggingFilter扩展了OncePerRequestFilter{
受保护的静态最终记录器Logger=Logger.getLogger(LoggingFilter.class);
私有AtomicLong id=新的AtomicLong(1);
私有静态最终字符串请求\u PREFIX=“请求:%s sId:%s Ip:%s方法:%s Uri:%s参数:%s”;
私有静态最终字符串响应_PREFIX=“Resp:”;
@凌驾
受保护的无效doFilterInternal(HttpServletRequest请求、HttpServletResponse响应、,
最终筛选链(FilterChain)抛出ServletException、IOException{
long requestId=id.incrementAndGet();
request=新的RequestWrapper(requestId,request);
response=新的ResponseWrapper(requestId,response);
试一试{
filterChain.doFilter(请求、响应);
}最后{
日志请求(请求);
logResponse((ResponseWrapper)响应);
}
}
私有无效日志请求(最终HttpServletRequest请求){
StringBuilder msg=新的StringBuilder();
msg.append(请求前缀);
HttpSession session=request.getSession(false);
字符串id=“”;
if(会话!=null){
id=session.getId();
}
字符串uri=request.getRequestURI();
String方法=request.getMethod();
字符串参数=”;
if(HttpServletRequest&!isMultipart(request))的请求实例{
HttpServletRequestWrapper=(HttpServletRequest)请求;
Map parameters=requestWrapper.getParameterMap();
for(条目:parameters.entrySet()){
String[]value=entry.getValue();
字符串keyV=“”;
if(value==null | | value.length==0){
持续
}否则{
如果(value.length==1){
keyV=值[0];
}否则{
keyV=Arrays.toString(值);
}
}
参数+=“{entry.getKey()+”:“+keyV+”}”;
}
}
logger.info(String.format(REQUEST_前缀,String.valueOf((RequestWrapper)REQUEST.getId()),id,
getClientIP(请求),方法,uri,参数);
}
私有布尔isMultipart(最终HttpServletRequest请求){
return request.getContentType()!=null&&request.getContentType().startsWith(“多部分/表单数据”);
}
专用void日志响应(最终响应包装器响应){
StringBuilder msg=新的StringBuilder();
append(RESPONSE_前缀).append((RESPONSE.getId());
试一试{
String contentType=response.getContentType();
if(contentType!=null&&contentType.contains(“json”)){
msg.append(“有效负载:”).append(新字符串(response.toByteArray(),response.getCharacterEncoding());
}否则{
msg.append(“内容类型:”).append(内容类型);
}
}捕获(不支持的编码异常e){
logger.warn(“解析响应有效负载失败”,e);
}
logger.info(msg.toString());
}
}
非常感谢 你的应用程序收到了一些请求…我运行服务器localhost,即使我关闭了网络连接,日志也会继续运行。这没有意义,如果服务器是本地的,那么无论如何都不需要网络连接。您的ide或brwoser可能正在向您部署的应用程序ajax发出请求?谢谢。我再次检查,并退出所有浏览器,问题仍然存在。使用eclipse运行时没有问题。这有点奇怪……嗨,尼姆斯基,我发现了问题。调试配置中有一个“打开浏览器”选项。我认为如果选中此选项,该想法将打开浏览器。但是我在任何地方都找不到浏览器。。。。非常感谢你,你说得对!