菜鳥學SpringMVC之—— SpringMVC+Loganj實現日誌管理

SpringMVC

SpringMVC+Loganj實現日誌管理:

導入依賴

<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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章