aop打印日志

首先在资源目录下创建logback.xml文件

文件的内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!--======================================= 本地变量 ======================================== -->
	<!--在没有定义${LOG_HOME}系统变量的时候,可以设置此本地变量。提交测试、上线时,要将其注释掉,使用系统变量。 -->
	<!-- <property name="LOG_HOME" value="D:/data/logs" /> -->

	<!-- 应用名称:和统一配置中的项目代码保持一致(小写) -->
	<property name="APP_NAME" value="base" />
	<!--日志文件保留天数 -->
	<property name="LOG_MAX_HISTORY" value="30" />
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
	<!--应用日志文件保存路径 -->
	<property name="LOG_APP_HOME" value="${APP_NAME}/app" />

	<!--=========================== 按照每天生成日志文件:默认配置=================================== -->
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
		</encoder>
	</appender>
	<!-- 按照每天生成日志文件:主项目日志 -->
	<appender name="APP"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志文件输出的文件名 -->
			<FileNamePattern>${LOG_APP_HOME}/base.%d{yyyy-MM-dd}.log
			</FileNamePattern>
			<!--日志文件保留天数 -->
			<MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{500} - %msg%n</pattern>
		</encoder>
	</appender>
	<!--=============================== 日志输出: 默认主业务日志 ====================================== -->
	<logger name="org.springframework">
		<level value="WARN" />
	</logger>
	<logger name="org.apache.shiro">
		<level value="WARN" />
	</logger>
	<logger name="freemarker">
		<level value="WARN" />
	</logger>
	<logger name="org.hibernate">
		<level value="WARN" />
	</logger>
	<logger name="org.hibernate.SQL">
		<level value="DEBUG" />
	</logger>

	<root level="INFO">
		<appender-ref ref="APP" />
		<appender-ref ref="STDOUT" />
	</root>
</configuration>

创建aop日志类

LogAspectServiceApi
package com.itmayiedu.common.log;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
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;

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

/**
 * @author wangjie
 * @date 2019/12/2 18:15
 * @description 使用aop打印日志
 * @company 石文软件有限公司
 */
@Aspect
// 申明是个spring管理的bean
@Component
@Slf4j
public class LogAspectServiceApi {

    private JSONObject jsonObject = new JSONObject();
    private  final Logger log= LoggerFactory.getLogger(LogAspectServiceApi.class);
    // 申明一个切点 里面是 execution表达式com.itmayiedu.api.service.impl
    @Pointcut("execution(public * com.itmayiedu.api.service.impl.*.*(..))")
    private void controllerAspect() {
    }

    // 请求method前打印内容
    @Before(value = "controllerAspect()")
    public void methodBefore(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        log.info("===============请求内容===============");
        try {
            // 打印请求内容
            log.info("请求地址:" + request.getRequestURL().toString());
            log.info("请求方式:" + request.getMethod());
            log.info("请求类方法:" + joinPoint.getSignature());
            log.info("请求类方法参数:" + Arrays.toString(joinPoint.getArgs()));
        } catch (Exception e) {
            log.error("###LogAspectServiceApi.class methodBefore() ### ERROR:", e);
        }
        log.info("===============请求内容===============");
    }

    // 在方法执行完结后打印返回内容
    @AfterReturning(returning = "o", pointcut = "controllerAspect()")
    public void methodAfterReturing(Object o) {
        log.info("--------------返回内容----------------");
        try {
            log.info("Response内容:" + jsonObject.toJSONString(o));
        } catch (Exception e) {
            log.error("###LogAspectServiceApi.class methodAfterReturing() ### ERROR:", e);
        }
        log.info("--------------返回内容----------------");
    }

}

@Slf4j打印日志


package com.itmayiedu.api.service.impl;

import java.util.Map;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

import com.itmayiedu.api.service.DemoApiService;
import com.itmayiedu.common.api.BaseApiService;

@Slf4j
@RestController
public class DemoApiServiceImpl extends BaseApiService implements DemoApiService {

	@Override
	public Map<String, Object> demo() {
		return setResutSuccess();
	}
}

原文地址:https://www.cnblogs.com/wang66a/p/12069283.html

时间: 2024-10-09 10:29:24

aop打印日志的相关文章

SpringBoot 配置 AOP 打印日志

在项目开发中,日志系统是必不可少的,用AOP在Web的请求做入参和出参的参数打印,同时对异常进行日志打印,避免重复的手写日志,完整案例见文末源码. 一.Spring AOP AOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. AOP中有以下概念: Aspect(切面):声明类似于Java中的类声明,在Asp

springboot aop + logback + 统一异常处理 打印日志

1.src/resources路径下新建logback.xml 控制台彩色日志打印 info日志和异常日志分不同文件存储 每天自动生成日志 结合myibatis方便日志打印(debug模式) <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 可以在LogBack 的配置中使用相对路径--> &

spring aop简单日志实例

转载自:http://www.blogjava.net/laoding/articles/242611.html 一直就用spring的IOC,遗憾spring的另一重要组成部分AOP却没用过,所以近几天抽空研究了下AOP,学了些东西,在这里记录下spring2.0的aop配置,以一个简单的记录日志的实例来说明,先介绍下用XMLSchema来配置,下一篇介绍annotation配置,废话不多说,开始吧先新建个web工程,将spring的包加进去,为方便就把全部的jar包加进去. 先来看个接口,很

Spring Boot 入门(五):集成 AOP 进行日志管理

本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页查询,Generator 代码自动生成器,Shiro登录及权限管理.本篇博客主要是集成 AOP 进行日志管理 1.导入 jar 包 1 <!-- aop --> 2 <dependency> 3 <groupId>org.springframework.boot</g

Spring AOP进行日志记录

在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用.然后进行日志记录.使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志.但是实现起来有点麻烦. 另外一种就是使用Spring的AOP了.这种方式实现起来非常简单,只要配置一下配置文件就可以了.可是这种方式会拦截下所有的对action的每个操作.使得效率比较低.不过想做详细日志

使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)

说来惭愧,今天就写了个"hello world",了解了一下log4j的日志. 本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置文件开始用的log4j.properties,结果控制台一直打印ERROR StatusLogger No log4j2 configuration file found.也就是Log4j2配置文件没找到的意思. 我就把log4j.properties文件名改成log4j2.properties,结果不报错了

打印日志编程

C++打印日志编程例子: int iCnt = 0; CString csMsg; CTime curTime; CMyLog mylog; CString csMylog; csMylog.Format("%d:\\CYJ\\ThreadTask%d.log",id); csMsg.Format("%s第%d客户端,第%d轮温循测试开始\r\n",curTime.Format("%Y-%m-%d %H.%M.%S"),id,iCnt); myl

打印日志

=============================================== #最普通的log打印 import logging log_file="/tmp/mylog.log" logging.basicConfig(filename=log_file,level=logging.DEBUG) def fun1(): logging.debug("This is running fun1") if __name__=="__main_

python之打印日志logging

1 import logging 2 3 4 # 简单打印日志举例 5 logging.basicConfig(level=logging.DEBUG) # 设置日志级别,WARN 6 logging.warning('Watch out!') # will print a message to the console 7 logging.info('I told you so') # will not print anything 8 9 10 # 打印日志到文件,注意要新起一个文件,否则不能