日志工厂 (log4j)
第一步:
在resources文件夹下新建log4j.properties文件,复制下面的内容时,每行后面如果有空格的话一定要去掉,log4j.appender.File.File为log日志存放的路径。
1 log4j.rootLogger=INFO,Console,File 2 log4j.appender.Console=org.apache.log4j.ConsoleAppender 3 log4j.appender.Console.Target=System.out 4 log4j.appender.Console.layout = org.apache.log4j.PatternLayout 5 log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n 6 7 log4j.appender.File = org.apache.log4j.RollingFileAppender 8 #log4j.appender.File.File = 定义为你需要保存的路径 9 log4j.appender.File.File = C:/Users/10301/Desktop/test/logs/info/info.log 10 log4j.appender.File.MaxFileSize = 10MB 11 12 log4j.appender.File.Threshold = ALL 13 log4j.appender.File.layout = org.apache.log4j.PatternLayout 14 log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n
第二步:
添加依赖;去除springboot的log,添加log4j,因为springboot自带的log4j不起作用,如果不去除有可能会报依赖冲突的错误,会人很摸不着脑袋.....
在Pom.xml中添加依赖
1 <!-- 排除springboot自带的logging 日志--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter</artifactId> 5 <exclusions> 6 <exclusion> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-logging</artifactId> 9 </exclusion> 10 </exclusions> 11 </dependency> 12 13 <!-- 重新导入log4j --> 14 <dependency> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-log4j</artifactId> 17 <version>1.3.8.RELEASE</version> 18 </dependency>
版本号一定要注意,springboot下的log4j的版本最新是1.3.8,如果你的springboot的parent版本过高,那么在添加log4j时就添加自己的版本。
第三步:
在控制层(Controller)记录日志
1 import com.choice.pojo.StudenterTable; 2 import com.choice.service.StuService; 3 import org.apache.log4j.Logger; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 8 @Controller 9 public class StuController { 10 11 @Autowired 12 StuService stuService; 13 14 Logger logger= Logger.getLogger(StuController.class); 15 //进页面 16 17 @RequestMapping("test") 18 public String test(){ 19 return "test"; 20 } 21 //进页面 22 @RequestMapping("success") 23 public String success(){ 24 return "success"; 25 } 26 27 //插入 28 @RequestMapping("stuInsert") 29 public String stuInsert(StudenterTable stu){ 30 //记录客户端请求参数 31 logger.info("插入了一条:"+" "+stu); 32 //把数据保存到数据库 33 logger.info("记录完成================================"); 34 stuService.stuInsert(stu); 35 logger.info("插入完成==================----------------=============="); 36 return "success"; 37 } 38 39 }
然后日志就会在设置的路径目录里生成log日志
(前端页面长这个样子,不喜勿喷,小白上路....)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 9 <form action="stuInsert" method="post" > 10 姓名: 11 <input type="text" name="stuName" required> 12 <br> 13 密码: 14 <input type="password" name="stuPwd" required> 15 <br> 16 <input type="submit" value="插入"> 17 </form> 18 19 </body> 20 21 </html>
第四步:
导入AOP依赖 是 为了统一处理前端数据,做日志。
1 <!-- AOP --> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-aop</artifactId> 5 </dependency>
第五步:
写一个切面类;
在java文件夹下新建包aspect,包里新建切面类,这个类在访问指定的controller之前会拦截并进入该类执行里面的方法。
1 import java.util.Enumeration; 2 import javax.servlet.http.HttpServletRequest; 3 import org.apache.log4j.Logger; 4 import org.aspectj.lang.JoinPoint; 5 import org.aspectj.lang.annotation.AfterReturning; 6 import org.aspectj.lang.annotation.Aspect; 7 import org.aspectj.lang.annotation.Before; 8 import org.aspectj.lang.annotation.Pointcut; 9 import org.springframework.stereotype.Component; 10 import org.springframework.web.context.request.RequestContextHolder; 11 import org.springframework.web.context.request.ServletRequestAttributes; 12 @Aspect 13 @Component//配置bean 14 public class WebLogAspect { 15 private Logger logger = Logger.getLogger(getClass()); 16 17 @Pointcut("execution(public * com.gyf.web.controller..*.*(..))") 18 public void webLog() { 19 20 } 21 22 @Before("webLog()") 23 public void doBefore(JoinPoint joinPoint) throws Throwable { 24 // 接收到请求,记录请求内容 25 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 26 HttpServletRequest request = attributes.getRequest(); 27 // 记录下请求内容 28 logger.info("---------------request----------------"); 29 logger.info("URL : " + request.getRequestURL().toString()); 30 logger.info("HTTP_METHOD : " + request.getMethod()); 31 logger.info("IP : " + request.getRemoteAddr()); 32 Enumeration<String> enu = request.getParameterNames(); 33 while (enu.hasMoreElements()) { 34 String name = (String) enu.nextElement(); 35 logger.info("name:" + name + " - value:" + request.getParameter(name)); 36 } 37 } 38 @AfterReturning(returning = "ret", pointcut = "webLog()") 39 public void doAfterReturning(Object ret) throws Throwable { 40 logger.info("---------------response----------------"); 41 // 处理完请求,返回内容 42 logger.info("RESPONSE : " + ret); 43 } 44 }
然后controller中就不需要加下面蓝色的内容了,因为这些已经在刚才的切面类中配过了。
这就已经配置好了,重启springboot项目,访问控制层的方法,会记录相应日志(报错不会记录!!!)
参考:(53条消息) springboot配置Log4j日志_刻苦的樊同学的博客-CSDN博客_log4j springboot

浙公网安备 33010602011771号