加入 maven 依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
加入打包
在 resources 包下面增加 logback.xml 配置
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--10 代表包名最大允许的长度-->
<pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<!--RollingFileAppender: 按天滚动输出的日志文件-->
<appender name="accessHistoryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件保存位置-->
<filenamePattern>/var/log/hello-spring/history.%d.log</filenamePattern>
</rollingPolicy>
<encoder>
<pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<!--root 最低级别日志输出, 引用 console 格式-->
<root level="debug">
<appender-ref ref="console"/>
</root>
<!--设置中类产生的日志,都会使用该设置所描述的规则
additivity:false 表示只会向指定的输出方式输出,否则也会向 console 输出-->
<logger name="com.ylq.springmvc.interceptor.AccessHistoryInterceptor" level="INFO" additivity="false"/>
</configuration>/>
response.setContentType("text/html;charset=utf-8");
编写拦截类
public class AccessHistoryInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(AccessHistoryInterceptor.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StringBuilder log = new StringBuilder();
log.append(request.getRemoteAddr());
log.append("|");
log.append(request.getRequestURL());
log.append("|");
log.append(request.getHeader("user-agent"));
logger.info(log.toString());
return true;
}
}
拦截器配置增加
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="com.ylq.springmvc.interceptor.AccessHistoryInterceptor"/>
</mvc:interceptor>