SpringBoot中通过AOP整合日志文件

1.SpringBoot中通过AOP整合日志文件

1. 导入相关的依赖


        org.springframework.boot
        spring-boot-starter

                org.springframework.boot
                spring-boot-starter-logging

        org.apache.logging.log4j
        log4j-core

        org.apache.logging.log4j
        log4j-api

        org.apache.logging.log4j
        log4j-slf4j-impl

        org.slf4j
        slf4j-api

        org.springframework.boot
        spring-boot-starter-aop

        org.springframework.boot
        spring-boot-starter-web

        org.springframework.boot
        spring-boot-starter-test
        test

        log4j
        log4j
        1.2.12

2.log4j2 日志文件


3.dao层的接口以及实现类

文件路径:com.dzj.dao.Userdao.java

package com.dzj.dao;

public interface Userdao {

    void add();

    void update();

    void delete();

    void query();
}

文件路径:com.dzj.dao.UserDaoImpl.java

package com.dzj.dao;

import org.springframework.stereotype.Service;

@Service
public class UserDaoImpl implements Userdao {
    @Override
    public void add() {
        System.out.println("执行了添加方法...");
    }

    @Override
    public void update() {

        System.out.println("执行了修改方法...");
    }

    @Override
    public void delete() {

        System.out.println("执行了删除方法...");
    }

    @Override
    public void query() {

        System.out.println("执行了查找方法...");
    }
}

4.Service层业务实现类

文件路径:com.dzj.service.UserService.java

package com.dzj.service;

import com.dzj.dao.UserDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    UserDaoImpl userDao;

    public void add(){
        userDao.add();
    }
    public void update(){
        userDao.update();
    }
    public void delete(){
        userDao.delete();
    }
    public void query(){
        userDao.query();
    }
}

5.Controller层接口控制类

文件路径:com.dzj.controller.UserController.java

package com.dzj.controller;

import com.dzj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping("/test")
    public String userTest(){

        userService.add();
        return "chenggongle...";
    }
}

6.编写业务类增强类,加入一个日志文件记录

package com.dzj.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

@Component
@Aspect
public class AdviceMethod {

    private static final Logger log = LoggerFactory.getLogger(AdviceMethod.class);

    @Pointcut("execution(public * com.dzj.service.UserService.*(..))")
    public void webLog(){}

    @Before("webLog()")
    public void before(JoinPoint joinPoint){

        //这个RequestContextHolder是Springmvc提供来获得请求的东西
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();

        // 记录下请求内容
        log.info("################URL : " + request.getRequestURL().toString());//获取请求的地址
        log.info("################HTTP_METHOD : " + request.getMethod());//获取请求的方法
        log.info("################IP : " + request.getRemoteAddr());
        log.info("################THE ARGS OF THE CONTROLLER : " + Arrays.toString(joinPoint.getArgs()));

        /**
         * getSignature().getDeclaringTypeName()   是获取包+类名的
         * joinPoint.getSignature.getName()  获取了方法名
         * joinPoint.getTarget() 返回的是需要加强的目标类的对象
         * joinPoint.getThis())  返回的是经过加强后的代理类的对象
         */
        log.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        log.info("################TARGET: " + joinPoint.getTarget());
        log.info("################THIS: " + joinPoint.getThis());
        System.out.println("方法执行之前...");
    }

    @After("webLog()")
    public void after(){
        System.out.println("方法执行之后...");
    }
}

7.运行测试,查看结果

启动主启动器类,在浏览器中输入http://localhost:8080/test,查看控制台输出信息

SpringBoot中通过AOP整合日志文件

搞定,结束…

Original: https://www.cnblogs.com/aadzj/p/15735373.html
Author: 小公羊
Title: SpringBoot中通过AOP整合日志文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612335/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一篇文章Shell脚本快速入门

    Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用 #开头的都被当作注释语句: 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可…

    Linux 2023年5月28日
    074
  • 应用配置管理,基础原理分析

    工程可以有点小乱,但配置不能含糊; 一、配置架构 在微服务的代码工程中,配置管理是一项复杂的事情,即需要做好各个环境的配置隔离措施,还需要确保生产环境的配置安全;如果划分的微服务足…

    Linux 2023年6月14日
    0115
  • 环境变量

    环境变量,简单来说就是描述程序执行环境的一组变量。 1、什么程序执行环境? 环境已经基础词汇呢,我们通常都用环境去解释别的词,想一下,日常生活怎么用环境。你到一个新地方,我问你环境…

    Linux 2023年6月6日
    0129
  • git使用命令行保留原分支迁移代码仓库

    有些时候我们需要对git仓库中的项目进行一些迁移,如从a账号迁移到b账号下,从github平台迁移到内部的gitlab平台等。一般平台会自带 migrate 或者 import 的…

    Linux 2023年6月7日
    0109
  • Centos7安装Docker

    一、docker运行流程 举个例子你想使用MySQL镜像,那么执行docker pull 下载镜像的时候 首先它会在本地仓库进行运行,如果本地仓库有你想要的MySQL镜像 那么它会…

    Linux 2023年6月6日
    090
  • 文件批量改名(有规律)

    1.如你的文件放在桌面名字为file的文件内,我要把这些文件批量名称改为page1.jpg,page2.jpg,page3.jpg………. 2….

    Linux 2023年6月13日
    091
  • 【设计模式】Java设计模式-命令模式

    Java设计模式 – 命令模式 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得,…

    Linux 2023年6月6日
    086
  • Linux与Windows文件同步

    本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时会复制全部内容,下次只传…

    Linux 2023年6月8日
    0143
  • 008 Linux 文件查找 find

    在 Linux 系统,find 毫无疑问是最强的文件查找工具。find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除、统计、复制迁移等操作。 find /…

    Linux 2023年5月27日
    0103
  • 数据库主从复制

    主从复制是MySQL中最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库…

    Linux 2023年6月6日
    068
  • MySQL安装和配置

    一、关闭防火墙并安装epel源 1、关闭selinux ①修改selinux的配置文件 [root@localhost ~]# vim /etc/selinux/config SE…

    Linux 2023年6月7日
    096
  • Running powershell scripts during nuget package installation and removal

    来源:https://devblogs.microsoft.com/nuget/NuGet-3-What-and-Why/ Since Visual Studio 2015 was…

    Linux 2023年5月28日
    0104
  • shell 获取变量是什么数据类型

    bash;gutter:true; function check(){ local a="$1" printf "%d" "$a&…

    Linux 2023年5月28日
    092
  • 服务器监控 -TOP命令详解(下)

    用jmeter做性能测试的时候,top命令是最简单扼要的查看服务器CPU和内存占用情况的命令。如下图就是TOP命令展示出来的结果,下面对结果进行详细解说。 Mem 物理内存: to…

    Linux 2023年6月8日
    093
  • MySQL提权 通过UDF

    UDF是什么 命令执行 文本写入 Example: 远程写入 反弹Shell 提权 UDF是什么 参考:https://www.cnblogs.com/litlife/p/9030…

    Linux 2023年6月6日
    0109
  • Git、TortoiseGit中文安装教程,如何注册Gitee账号进行代码提交,上传代码后主页贡献度没显示绿点(详解)

    今天给大家分享的是 Git 软件和 TortoiseGit 图形化软件的详细安装教程以及如何在 gitee 上进行代码提交。 首先我也是个刚接触 gitee 的一个小白用户,这些都…

    Linux 2023年6月6日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球