以前使用日志都是直接copy一个logger.error(info/debug)等的直接调用即可,根本没有去理解,自己项目中是如何集成日志模块的,在cruding的过程中,学习一下其中的实现原理。
以前对SLF4J、Logback、Log4j不怎么理解。百度一番,找到一个解释得比较直白的解释: SLF4J和Logback和Log4j和Logging的区别与联系
知道区别之后开始实践在Spring boot中如何使用SLFJ4+Logback
1、Logback相关的包是在spring-boot-starter-web中有的,所以在pom中如果已经依赖了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
就忽略这一步
2、配置logback
采用官方比较提倡的一种配置名字:logback-spring.xml;
关于配置文件说明:springboot是集成了比较基础的配置,如果已有文件可以满足需求的话就可以直接引用写好了的文件;
现在处于学习记录阶段,所以还是自己写一遍,至少能懂点皮毛;
给出一个自己配置的文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--常用日志级别:DEBUG《INFO《WARN《ERROR-->
<!--配置控制台日志格式-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<!--结果格式:2019-11-21 23:02:44 WARN [http-nio-8080-exec-24] 方法路径-->
%date{yyyy-MM-dd HH:mm:ss} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</layout>
</appender>
<!--配置日志输出到文件中 日志级别为低于ERROR-->
<appender name="fileInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--以下三行的实现效果:低于ERROR级别的日志都将会被记录在此文件中-->
<level>ERROR</level>
<!--onMatch:日志级别比中的处理方式:onMismatch:日志级别没有比中的处理方式-->
<!-- 处理方式枚举FilterReply:DENY(否决),NEUTRAL(中立),ACCEPT(接受)-->
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!--设置日志按照天记录%d-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>logs/log.info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!--配置日志输出到文件中 日志级别:ERROR输出在本文件中-->
<appender name="fileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>logs/log.error.%d.log</fileNamePattern>
<!--设置文件保留个数 按天的话就是保留15天内的日志文件-->
<MaxHistory>15</MaxHistory>
<!--设置所有文件大小-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="fileInfo"/>
<appender-ref ref="fileError"/>
</root>
</configuration>
文件解释:
1.appender:相当于把一个日志配置分解成多种日志输出方式,通过自己append加需要的日志形式,上述文件中添加了console和File形式的日志输出。常用的还有SMTP,这个在线上环境还是可以配置到运维邮箱。
2.filter:
如果有试用lombok插件,直接注解@Slf4j
log.error("获取到验证码");
log.info("获取到验证码");
info到info,error到error;
----------------------------下面记录一下 通过AOP对业务进行日志记录----------------------------------------------
1、自己加一个需要记录的注解类
package com.wuml;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 日志注解
*
* @author wuml
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AopLog {
String value() default "";
}
2、配置切面类
/**
* 日志切面类
* @author wuml
*/
@Aspect
@Component
public class AopLogAspect {
@Pointcut("@annotation(com.wuml.AopLog)")
public void aoplogPointCut() {
}
@Around("aoplogPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long now = System.currentTimeMillis();
//执行方法
Object result = point.proceed();
//方法执行时长
long time = System.currentTimeMillis() - now;
System.out.println("使用时长"+time);
//todo 记录日志 保存数据库或者使用工具
return result;
}
}
3、在Controller中的方法上加上
@AopLog("登录")