我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot中通过AOP整合日志文件的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot中通过AOP整合日志文件的实现

1.导入相关的依赖


<dependencies>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions> <!-- 去掉springboot自带的日志,不然会冲突 -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
 
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <!-- log4j-api -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
    </dependency>
    <!-- log4j-slf4j-impl -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
    <!-- slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <!-- slf4j-simple 解决冲突-->
    <!--<dependency>-->
        <!--<groupId>org.slf4j</groupId>-->
        <!--<artifactId>slf4j-simple</artifactId>-->
    <!--</dependency>-->
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
</dependencies>

2.log4j2 日志文件


<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration 后面的 status 用于设置 log4j2 自身内部的信息输出,可以不设置,当设置成 trace 时,可以看到 log4j2 内部各种详细输出-->
<configuration status="INFO">
    <!--先定义所有的 appender-->
    <appenders>
        <!--输出日志信息到控制台-->
        <console name="Console" target="SYSTEM_OUT">
            <!--控制日志输出的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </console>
    </appenders>
    <!--然后定义 logger,只有定义 logger 并引入的 appender,appender 才会生效-->
    <!--root:用于指定项目的根日志,如果没有单独指定 Logger,则会使用 root 作为默认的日志输出-->
    <loggers>
        <root level="info">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

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()));
 
        
        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整合日志文件的实现的文章就介绍到这了,更多相关SpringBoot AOP日志文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot中通过AOP整合日志文件的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot中怎么通过整合Redis实现管道

这篇文章给大家介绍SpringBoot中怎么通过整合Redis实现管道,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. Redis 之管道(pipeline)执行一个Redis命令,Redis客户端和Redis服务器
2023-06-20

springboot中如何通过整合Mapper实现单表操作

本文小编为大家详细介绍“springboot中如何通过整合Mapper实现单表操作”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot中如何通过整合Mapper实现单表操作”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
2023-06-08

SpringBoot整合Javamail实现邮件发送的详细过程

日常开发过程中,我们经常需要使用到邮件发送任务,比方说验证码的发送、日常信息的通知等,下面这篇文章主要给大家介绍了关于SpringBoot整合Javamail实现邮件发送的详细过程,需要的朋友可以参考下
2022-11-13

SpringBoot整合easyExcel实现CSV格式文件的导入导出

本文介绍了如何使用EasyExcel集成SpringBoot实现CSV格式文件的导入导出。导出时,配置EasyExcel并编写代码将数据写入响应流。导入时,配置EasyExcel并编写一个监听器类来处理读取到的数据。通过使用EasyExcel,可以轻松地在SpringBoot应用程序中处理CSV格式的文件,实现数据导入导出功能。
SpringBoot整合easyExcel实现CSV格式文件的导入导出
2024-04-02

SpringBoot中整合Ehcache实现热点数据缓存的详细过程

这篇文章主要介绍了SpringBoot中整合Ehcache实现热点数据缓存,SpringBoot中使用Ehcache比较简单,只需要简单配置,说白了还是SpringCache的用法,合理使用缓存机制,可以很好地提高项目的响应速度,需要的朋友可以参考下
2023-05-15

C#配置log4net实现将日志分类记录到不同的日志文件中

使用log4net配置C#应用程序,将不同日志类别记录到单独日志文件中。这有助于组织日志文件,简化故障排除和分析。通过XML配置文件和附加程序,可以将日志记录器与不同的日志文件相关联。该示例提供了将两个日志记录器配置为写入不同日志文件的详细步骤和代码示例。这样,不同的日志消息就会被分类记录,便于应用程序的维护和调试。
C#配置log4net实现将日志分类记录到不同的日志文件中
2024-04-02

hadoop如何通过CombineFileInputFormat实现小文件合并减少map的个数

小编给大家分享一下hadoop如何通过CombineFileInputFormat实现小文件合并减少map的个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!//
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录