springboot中的日志相关记录理解

   以前使用日志都是直接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:

LevelFilter: 根据记录级别对记录事件进行过滤。
如果事件的级别等于配置的级别,过滤器会根据 onMatch onMismatch 属性接受或拒绝事件。
ThresholdFilter: 过滤掉低于指定临界值的事件。
当记录的级别等于或高于临界值时,ThresholdFilter 的 decide() 方法会返回 NEUTRAL ;当记录级别低于临界值时,事件会被拒绝。
-------------------代码调用----------------------------
 

如果有试用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("登录")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值