springboot项目,利用过滤器,输出每次请求的url和参数
日志用的lombok + log4j2
在jar包的情况下输出是正常的
但打成war包就会出现问题
发现过滤器的日志打印了两次,但Controller是正常的只打印了一次,所以Controller应该只跑了一次
log4j2配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO">
<Properties>
<property name="LOG_PATTERN" value="%date{yy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<property name="FILE_PATH" value="/log/rest-log" />
<property name="FILE_NAME" value="rest-log" />
</Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/log.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout charset="UTF-8" pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="50MB"/>
</Policies>
<DefaultRolloverStrategy max="99"/>
</RollingFile>
</appenders>
<loggers>
<logger name="org.mybatis" level="info" additivity="false">
<AppenderRef ref="Console"/>
</logger>
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<root level="info">
<appender-ref ref="Console"/>
<!--<appender-ref ref="FileLog"/>-->
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
</configuration>
过滤器配置
@Slf4j
@Component
@WebFilter(filterName = "ApiFilter", urlPatterns = "/*")
public class RequestFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
long time = System.currentTimeMillis();
HttpServletRequest request = (HttpServletRequest) servletRequest;
filterChain.doFilter(servletRequest, servletResponse);
StringBuilder params = new StringBuilder("?");
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
params.append(entry.getKey()).append("=");
for (String s : entry.getValue()) {
params.append(s).append(",");
}
params.deleteCharAt(params.length() - 1);
params.append("&");
}
params.deleteCharAt(params.length() - 1);
log.info("[{}] {}ms, {}{}", request.getMethod(),System.currentTimeMillis() - time, request.getRequestURI(), params.toString());
}
}
打印出来的时间戳之差还不一样
打印出来的url并不是什么/favicon.ico,就是两个相同的url
楼主问题解决了吗,我这边解决springboot默认支持打jar包打war包的话不能使用@WebFilter需要自己注册个bean代码如下:
@Bean