日志在项目中的使用

啥是日志

logback log4j 日志啥用?展示记录代码的运行情况。用于经验总结,对项目的分析和异常调错。

在项目中日志分为两种:

  • 代码的日志,通过log4j logback等技术打印代码执行情况

  • 业务的日志,记录的是用户的行为信息,用户在系统中什么时间什么地点执行了什么方法看了什么数据。通过对这些信息的记录,可以分析用户,得到用户的喜好,做智能推荐。

    后台管理员 zhangsan 晚上10点 删除了一个上师

SpringBoot项目中Logback日志的使用

SpringBoot Logback的配置

之前:在项目中引入 logback.xml

SpringBoot默认集成Logback,意味着在SpringBoot项目中使用logback 可以不要配置文件

  1. 如果有 删除 logback.xml

  2. 在application配置文件中写入日志的配置

    日志等级:debug – info – warn – error

    从低到高 等级越高打印信息越少

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEnaUuRj-1653445487199)(assets/image-20200514175714080.png)]

    如果在 application 配置文件中有日志配置

    并且在项目中还存在 logback.xml 项目在执行的时候 会以logback.xml中的配置为准

在自己的代码中打印日志

在这里插入图片描述

学习怎么打印自己代码的日志?例如:打印Controller代码的日志,打印业务层代码的日志?

日志打印的意义

在实际的开发中 用来取代打印语句 System.out.println("查询菜单数据");

打印语句的问题:

  1. 代码上线之后 调试用的打印语句 需要全部删除
  2. 怎么删除?手动注释 过了几天要在代码的基础上继续开发 调试代码需要打印语句 注释再开吗?

用到了日志打印

日志打印的优点:

  1. 信息全面
  2. 可以根据 日志等级配置 决定要打印哪些内容
    1. 开发的时候 使用debug
    2. 上线的之后 info --> error

以业务层为例

日志打印的使用步骤(方法一):

  1. 开启要打印日志的包的 日志等级

在这里插入图片描述

  1. 在要打印日志的类中创建 日志对象

在这里插入图片描述

/**
 * 创建日志打印对象
 *
 * Logger LoggerFactory 都是 org.slf4j 包
 * 参数为:当前类的类对象
 */
private Logger logger = LoggerFactory.getLogger(CmfzMenuServiceImpl.class);
  1. 在代码中使用日志对象 打印自己的日志信息

在这里插入图片描述

  1. 效果

在这里插入图片描述

**日志打印的使用步骤(方法二):**注解的方式

  1. 开启要打印日志的包的 日志等级

在这里插入图片描述

  1. 在要打印日志的类上加注解

在这里插入图片描述

  1. 在代码中直接使用日志打印

在这里插入图片描述

日志打印的细节处理:

  • 打印对象类型 需要手动toString

在这里插入图片描述

  • 占位符的使用

在这里插入图片描述

项目中管理员日志的记录

需求:记录管理员在后台项目的操作信息:谁 什么时间 什么地点 查看了什么数据 做了什么操作

1 确定要记录什么数据

在这里插入图片描述

CREATE TABLE `cmfz_log` (
  `log_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `log_date` datetime DEFAULT NULL,
  `log_ip` varchar(255) DEFAULT NULL,
  `log_type` varchar(255) DEFAULT NULL,
  `log_content` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`log_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 确定什么技术来实现
  1. 在用户操作的时候 获取日志信息
  2. 把日志信息添加数据库

使用aop实现

在这里插入图片描述

注解式AOP

之前通过xml配置的方式

通过注解的方式【通过代码的方式 类似配置类】

实现aop的基本步骤

  1. 写增强
  2. 确定切入点
  3. 织入

注解式AOP的步骤

  1. 创建一个切面类

在这里插入图片描述

  1. 在类中创建一个增强方法 通过注解确定增强类型

在这里插入图片描述

  1. 在注解中配置切入点

在这里插入图片描述

重点:掌握常见aop注解

自定义注解

  1. 创建注解类

在这里插入图片描述
2. 配置注解的元注解

在这里插入图片描述

  1. 配置自定义注解的属性

在这里插入图片描述

重点:元注解

3 日志记录代码实现
  1. 创建自定义注解

在这里插入图片描述

  1. 创建日志记录切面类
    在这里插入图片描述

  2. 写日志记录的增强方法 确定增强类型

     /**
         * 日志增强
         * 1. 获取日志数据
         * 2. 日志数据添加数据库
         */
        @After()
        public void logAfter(JoinPoint joinPoint){
            CmfzLog cmfzLog = new CmfzLog();
            /**
             * 1.获取日志数据
             */
    //        获取日期
            cmfzLog.setLogDate(new Date());
    
    //        获取ip
            /**
             * RequestContextHolder 可以获取当前线程对应的请求
             *
             * 一般情况下 ip获取会使用工具类
             */
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
            String ip = IPKit.getIpAddrByRequest(request);
            cmfzLog.setLogIp(ip);
    
    //        获取用户名
            CmfzAdmin admin = (CmfzAdmin) request.getSession().getAttribute("admin");
    
            if (admin == null){
                cmfzLog.setUsername("root");
            }else {
                cmfzLog.setUsername(admin.getUsername());
            }
    
    //        操作类型和操作内容  aop不同的方法获取到的类型和内容不同
            /**
             *  通过joinPoint可以获取切入点附近所有的信息 类 方法 属性 注解 等等
             *
             *  获取当前被切方法的日志注解
             *  1 通过连接点对象joinPoint获取 方法签名对象
             *  2 通过方法签名对象获取被切的方法
             *  3 通过方法对象获取方法上的注解
             *  4 获取注解中的值
             */
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
    
            Method method = signature.getMethod();
    //        参数为 要获取的注解的类对象
            LogAnnotation annotation = method.getAnnotation(LogAnnotation.class);
    
            cmfzLog.setLogType(annotation.type());
    
            cmfzLog.setLogContent(annotation.value());
    
            /**
             * 2.日志数据添加数据库
             */
            cmfzLogDao.insert(cmfzLog);
        }
    
  3. 配置增强的切入点

    需要在增强中获取自定义注解的值,意味着只能切有注解的方法,通过 切注解 的方式实现

在这里插入图片描述

  1. 在任何一个想要记录日志的方法上 加注解 就可以自动的记录日志

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值