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

SpringMVC

SpringMVC+Log4j实现日志管理:

导入依赖

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
</dependency>

引入配置文件

### 配置根 ###
log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE

### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug

### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

@Service 
public class UserServiceImpl implements IUserService {
    
    

    @Autowired
    UserMapper mapper;

    Logger logger = Logger.getLogger(UserServiceImpl.class);

    @Override
    public User login(User user) {
    
    
        logger.debug("ZAQ");
        return mapper.findUser(user);
    }
}

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

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

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

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

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

<dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
</dependency>

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

<?xml version="1.0" encoding="UTF-8"?>
<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
">
    <mvc:annotation-driven></mvc:annotation-driven><!--mvc注解驱动-->
    
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

</beans>

实现增强:

@Aspect
@Component
public class LogAdvice {
    
    

    Logger logger = Logger.getLogger(Logger.class);

    @Pointcut("execution(* com.home.test.service..*.*(..))")//这里可以指定方法,指定给service包下的具体哪些服务加入日志系统
    public void pointCut(){
    
    }

    @Before("pointCut()")
    public void before(JoinPoint joinPoint) {
    
    
        logger.debug(joinPoint.getTarget() + " : " + joinPoint.getSignature());
        logger.debug("方法执行参数: " + Arrays.toString(joinPoint.getArgs()));
    }


    @Around("pointCut()")
    public Object around(ProceedingJoinPoint pjp) {
    
    
        Object result = null;
        try {
    
    
            result = pjp.proceed(pjp.getArgs());
            logger.debug("方法的执行结果:" + result);
        } catch (Throwable throwable) {
    
    
            throwable.printStackTrace();
        }
        return result;
    }
}

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

Guess you like

Origin blog.csdn.net/ysf15609260848/article/details/106649713