菜鸟学SpringMVC之—— SpringMVC+Log4j实现日志管理

野性酷女 2023-02-16 12:06 69阅读 0赞

SpringMVC

SpringMVC+Log4j实现日志管理:

导入依赖

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.12</version>
  5. </dependency>

引入配置文件

  1. ### 配置根 ###
  2. log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE
  3. ### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
  4. log4j.logger.org.apache=dubug
  5. log4j.logger.java.sql.Connection=dubug
  6. log4j.logger.java.sql.Statement=dubug
  7. log4j.logger.java.sql.PreparedStatement=dubug
  8. log4j.logger.java.sql.ResultSet=dubug
  9. ### 配置输出到控制台 ###
  10. log4j.appender.console = org.apache.log4j.ConsoleAppender
  11. log4j.appender.console.Target = System.out
  12. log4j.appender.console.layout = org.apache.log4j.PatternLayout
  13. log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
  14. @Service
  15. public class UserServiceImpl implements IUserService {
  16. @Autowired
  17. UserMapper mapper;
  18. Logger logger = Logger.getLogger(UserServiceImpl.class);
  19. @Override
  20. public User login(User user) {
  21. logger.debug("ZAQ");
  22. return mapper.findUser(user);
  23. }
  24. }

登录成功后在控制台打印的日志信息:
在这里插入图片描述
但是项目中肯定是要将日志信息保存到硬盘中,这时修改一下log4j的配置文件就行了,给上面的配置文件中加入下面配置。

  1. # 日志文件(logFile)
  2. log4j.appender.fileAppender=org.apache.log4j.FileAppender
  3. #级别,记录DEBUG及以上级别
  4. log4j.appender.fileAppender.Threshold=DEBUG
  5. log4j.appender.fileAppender.ImmediateFlush=true
  6. #后缀往上加
  7. log4j.appender.fileAppender.Append=true
  8. log4j.appender.fileAppender.File=Z:/logs/log.log4j
  9. log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
  10. # 输出的格式 %d:时间;%l:级别;%m:信息;%n:下一行
  11. log4j.appender.fileAppender.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

成功后输出到对应的文件中

在这里插入图片描述
这时我们发现,以后所有的查询等涉及敏感操作的过程都要在service中给其加入日志打印功能,这时就让service层的代码很乱。怎么解决呢?那就用AOP解决,这就让我们的日志系统更加灵活。

要使用AOP,先导入aspectJ依赖包

  1. <dependency>
  2. <groupId>org.aspectj</groupId>
  3. <artifactId>aspectjweaver</artifactId>
  4. <version>1.9.5</version>
  5. </dependency>

并且在配置文件中启动AOP注解驱动

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
  3. <mvc:annotation-driven></mvc:annotation-driven><!--mvc注解驱动-->
  4. <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  5. </beans>

实现增强:

  1. @Aspect
  2. @Component
  3. public class LogAdvice {
  4. Logger logger = Logger.getLogger(Logger.class);
  5. @Pointcut("execution(* com.home.test.service..*.*(..))")//这里可以指定方法,指定给service包下的具体哪些服务加入日志系统
  6. public void pointCut(){ }
  7. @Before("pointCut()")
  8. public void before(JoinPoint joinPoint) {
  9. logger.debug(joinPoint.getTarget() + " : " + joinPoint.getSignature());
  10. logger.debug("方法执行参数: " + Arrays.toString(joinPoint.getArgs()));
  11. }
  12. @Around("pointCut()")
  13. public Object around(ProceedingJoinPoint pjp) {
  14. Object result = null;
  15. try {
  16. result = pjp.proceed(pjp.getArgs());
  17. logger.debug("方法的执行结果:" + result);
  18. } catch (Throwable throwable) {
  19. throwable.printStackTrace();
  20. }
  21. return result;
  22. }
  23. }

成功的打印日志信息:
在这里插入图片描述
如果真正发布项目到生产环境的时候将日志信息输出级别调整至warn就可以了,因为debug级别比较低,一般没必要输出。(风险级别排序:debug < info< warn < error)

发表评论

表情:
评论列表 (有 0 条评论,69人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA——内部类

    内部类 内部类:定义在一个类里面的类。一般的内部类包括:成员内部类、局部内部类、匿名内部类和静态内部类 ,下面我们说一下成员内部类和静态内部类 一、成员内部类 成

    相关 JAVA——继承

    继承 Java中, 类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。 继承关键字:extends意为扩展,继承就是子类对父

    相关 JAVA——前言

    一、硬件 一个电脑的核心是CPU,CPU看上去很大,其实只有很小的一片才是CPU,其他都是散热片。 主板:主板上有一个能承载CPU的管脚孔,每个管脚孔里有两个