日志工厂 (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
Log4j.properties

第二步:

  添加依赖;去除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>
Pom.xml

  版本号一定要注意,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 }
Controller

  然后日志就会在设置的路径目录里生成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>
test.html

 第四步:

    导入AOP依赖 是 为了统一处理前端数据,做日志。

1 <!-- AOP -->
2 <dependency>
3   <groupId>org.springframework.boot</groupId>
4   <artifactId>spring-boot-starter-aop</artifactId>
5 </dependency>
Pom.xml

第五步:

  写一个切面类

  在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 }
java包下aspect里边的WebLogAspect

  然后controller中就不需要加下面蓝色的内容了,因为这些已经在刚才的切面类中配过了。

 这就已经配置好了,重启springboot项目,访问控制层的方法,会记录相应日志(报错不会记录!!!

参考:(53条消息) springboot配置Log4j日志_刻苦的樊同学的博客-CSDN博客_log4j springboot

 


 

参考:(50条消息) 常见日志工厂_懒洋洋的菌菌的博客-CSDN博客_日志工厂

posted @ 2022-08-07 21:05  凤梨小屋  阅读(97)  评论(0)    收藏  举报