首先在資源目錄下創建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();
}
}