1.新建工程
通过Spring Initializr创建
添加所需依赖
说明:
- web 基于Spring框架体系的web项目
- Thymeleaf 前端模板引擎
- Spring Boot DevTools 热部署
- SpringData JPA 全自动的ORM框架
- Mysql Mysql驱动包
2.完善配置 application.yml
spring:
thymeleaf:
mode: HTML5
# 配置数据源
datasource:
url: jdbc:mysql://localhost:3306/whlg01?serverTimezone=Asia/Shanghai&characterEnconding=utf-8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123
# JPA 的配置
jpa:
hibernate:
ddl-auto: update
show-sql: true
# 指定端口
server:
port: 8090
# 指定日志
logging:
level:
root: info
file:
path: log/blo
3.AOP 日志管理
定义切面类,实现web层的日志切片
`import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Aspect
@Component
public class LogAspect {
// 日志记录器
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/*
@Aspect 表示该类是一个切面类
*/
@Pointcut("execution(* com.zhongruan.web.*.*(..))")
public void log() {
/*
execution(* com.zhongruan.web.*.*(..))
* 修饰符
*/
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
System.out.println("-----------doBefore----------");
// 将 用户访问的url ip 调用的方法 传递的参数
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String url = request.getRequestURL().toString();
String ip = request.getRemoteAddr();
String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
RequestLog requestLog = new RequestLog(url, ip, classMethod, args);
logger.info("Result: {}", requestLog);
}
@After("log()")
public void doAfter() {
System.out.println("-----------doAfter----------");
}
@AfterReturning(returning = "result", pointcut = "log()")
public void doAfterReturn(Object result) {
logger.info("Result:{}", result);
}
private class RequestLog {
private String url;
private String ip;
private String classMethod;
private Object[] args;
public RequestLog() {
}
public RequestLog(String url, String ip, String classMethod, Object[] args) {
this.url = url;
this.ip = ip;
this.classMethod = classMethod;
this.args = args;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getClassMethod() {
return classMethod;
}
public void setClassMethod(String classMethod) {
this.classMethod = classMethod;
}
public Object[] getArgs() {
return args;
}
public void setArgs(Object[] args) {
this.args = args;
}
@Override
public String toString() {
return "RequestLog{" +
"url='" + url + '\'' +
", ip='" + ip + '\'' +
", classMethod='" + classMethod + '\'' +
", args=" + Arrays.toString(args) +
'}';
}
}
}
`