2.4 日志处理

2.4.1 记录日志内容

  • 请求url
  • 访问者ip
  • 调用方法classMethod
  • 参数args
  • 返回内容

2.4.2 新建包aspect,新建日志切面处理类

package com.fei.aspect;

import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
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.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; /**
* Created by zxf on 2019年9月28日
*/
@Aspect // 进行切面操作
@Component // 组件扫描
public class LogAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); // 切面
@Pointcut("execution(* com.fei.controller.*.*(..))")
public void log() {
} // 切面前操作
@Before("log()") // 传递切面方法
public void doBefore(JoinPoint joinPoint) {
logger.info("---------doBefore------"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); String url = request.getRequestURL().toString();
String ip = request.getRemoteAddr(); Signature signature = joinPoint.getSignature();
String classMethod = signature.getDeclaringTypeName() + "." + signature.getName();
Object[] args = joinPoint.getArgs(); RequestLog requestLog = new RequestLog(url, ip, classMethod, args); logger.info("Reqeust : {}", requestLog);
} // 切面后操作
@After("log()") // 传递切面方法
public void doAfter() {
logger.info("---------doAfter------");
} // 切面返回后操作
@AfterReturning(returning = "result", pointcut = "log()") // 传递切面方法
public void doAfterReturn(Object result) {
logger.info("Result : {}", result);
} /**
* 封装日志记录需要的内容
*
* @author fei
*
*/
private class RequestLog {
private String url;// 请求url
private String ip;// 访问者ip private String classMethod;// 调用方法
private Object[] args;// 参数 public RequestLog(String url, String ip, String classMethod, Object[] args) {
super();
this.url = url;
this.ip = ip;
this.classMethod = classMethod;
this.args = args;
} @Override
public String toString() {
return "[url=" + url + ", ip=" + ip + ", classMethod=" + classMethod + ", args=" + Arrays.toString(args)
+ "]";
} }// RequestLog
}// LogAspect

测试日志切面处理Controller

@Controller
public class IndexController { @GetMapping("/{id}/{name}")
public String toIndex(@PathVariable("id") Integer id, @PathVariable("name") String name) {
System.out.println("====index()方法执行===="); return "index";
}
}

Spring Boot日志处理的更多相关文章

  1. Springboot 系列(四)Spring Boot 日志框架

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...

  2. Spring Boot日志集成实战

    Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...

  3. Spring Boot 日志配置

    Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...

  4. Spring Boot 日志记录 SLF4J

    Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人 ...

  5. Spring Boot日志集成

    Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...

  6. 让你的spring-boot应用日志随心所欲--spring boot日志深入分析

    1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...

  7. 54. spring boot日志升级篇—logback【从零开始学Spring Boot】

    在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...

  8. 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】

    在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...

  9. 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】

    如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习 90.Spring Boot 1.4 使用log4j错误[从零开始学Spring Boot] Log4j是 ...

  10. Spring Boot日志使用

    前言: 这是我第一次仔细研究Spring Boot相关的知识,就拿日志下手了,欢迎大家指点 Spring Boot日志关系 这个是Spring Boot的启动器,我们点击spring-boot-sta ...

随机推荐

  1. ps 和 pstree的用法

    ps 查看某个具体的命令进程: ps -C cmd-name: 如: ps -C httpd // 如果有多个名字相同的进程, 如httpd... 应该是它下面的子进程, 这时会显示第一个进程id. ...

  2. 1、Shiro简介以及整体架构

    1.Shiro概念和作用: 利用shiro可以快速完成权限管理模块的开发 Spring的官网也是用Shiro做安全管理的... Shiro整体架构: 可能你感觉上面的图片很乱,但是你一定要先大体有个印 ...

  3. babel-node 和 nodemon

    概述 今天我继续完善我做的用来 mock 前端数据的库:ym-mock. 我想要实现 2 个需求: 支持 es6,至少要能 import 吧. 修改了代码之后能自动热更新,不能我修改了服务器代码要手动 ...

  4. Python基础(函数部分)

    写在前面 加勒比海盗今天上映! 一.函数的基本概念 - 函数是什么?  函数,就是一个'锤子',一个具有特定功能的'锤子',使用者可以在适当的时候使用这个'锤子',而不用再去从头做一个'锤子':即可以 ...

  5. Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    https://blog.csdn.net/charlessimonyi/article/details/50904956 Win8.1+VS2013+WDK8.1+VirtualBox or VMw ...

  6. RESR API (三)之Views

    Class-based Views Django's class-based views are a welcome departure from the old-style views. - Rei ...

  7. spring(二) AOP注入

    AOP概念 l  AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 l  经典应用:事务管理.性能监视.安全检查.缓存 .日志等 l  Spring AOP使用纯Java实现,不需要专门的编译 ...

  8. CentOS安装部署sha##dow**socks

    注意事项,pip版本不能太低,实测9.0.3可行(需要python 2.7,低版本python升级办法另有文章介绍). pip --version 以shadowsocks-2.8.2为例: pip ...

  9. 小白学Python(19): Pyinstaller 生成 exe 文件

    python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装 ...

  10. 阿里云服务器重启出现An error occurred 如何处理

    最近网站重启阿里云服务后,出现 An error occurred, An error occurred. Sorry, the page you are looking for is current ...