javaidea日志循环

javaidea日志循环,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<

我刚刚将IDE从Eclipse更改为Idea 14,并发现了一个日志循环问题

我无法发布图片,以下是链接:

就像图片一样,继续循环大约半秒钟,就没有收入要求了

Eclipse中的相同代码也可以

web.xml

<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运行时没有问题。这有点奇怪……嗨,尼姆斯基,我发现了问题。调试配置中有一个“打开浏览器”选项。我认为如果选中此选项,该想法将打开浏览器。但是我在任何地方都找不到浏览器。。。。非常感谢你,你说得对!