springBoot AOP环绕增强、自定义注解、log4j2、MDC
生活随笔
收集整理的這篇文章主要介紹了
springBoot AOP环绕增强、自定义注解、log4j2、MDC
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
(一)log4j2 maven配置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 切換log4j2日志讀取 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency> <!-- 配置 log4j2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- 加上這個(gè)才能辨認(rèn)到log4j2.yml文件 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>在resources 文件夾下創(chuàng)建log4j2.yml 文件
Configuration:status: warnProperties: # 定義全局變量Property: # 缺省配置(用于開發(fā)環(huán)境)。其他環(huán)境需要在VM參數(shù)中指定,如下:#測(cè)試:-Dlog.level.console=warn -Dlog.level.xjj=trace#生產(chǎn):-Dlog.level.console=warn -Dlog.level.xjj=info- name: log.level.consolevalue: trace- name: log.level.xjjvalue: trace- name: log.pathvalue: D:/Logs/log- name: project.namevalue: my-spring-bootAppenders:Console: #輸出到控制臺(tái)name: CONSOLEtarget: SYSTEM_OUTThresholdFilter:level: ${sys:log.level.console} # “sys:”表示:如果VM參數(shù)中沒指定這個(gè)變量值,則使用本文件中定義的缺省全局變量值onMatch: ACCEPTonMismatch: DENYPatternLayout:pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m %X{REQUESTID} %n"RollingFile: # 輸出到文件,超過128MB歸檔- name: ROLLING_FILEignoreExceptions: falsefileName: ${log.path}/${project.name}.logfilePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"PatternLayout:pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m %X{REQUESTID} %n"Policies:SizeBasedTriggeringPolicy:size: "128 MB"DefaultRolloverStrategy:max: 1000Loggers:Root:level: infoAppenderRef:- ref: CONSOLE- ref: ROLLING_FILELogger: # 為com.xjj包配置特殊的Log級(jí)別,方便調(diào)試- name: com.xjjadditivity: falselevel: ${sys:log.level.xjj}AppenderRef:- ref: CONSOLE- ref: ROLLING_FILE其中?%X{REQUESTID} 為MDC設(shè)定的請(qǐng)求標(biāo)識(shí),每個(gè)請(qǐng)求都會(huì)有,用于跟蹤日志。
(二)MDC和AOP 環(huán)繞增強(qiáng)、自定義注解
創(chuàng)建日志類
public class tools_log {public static Logger getLogger(Class class_) {Logger logger = LoggerFactory.getLogger(class_);return logger;} }//endAOP、MDC
@Aspect @Component @Slf4j public class LogAspect {@Pointcut("execution(public * 包路徑..*.*(..))")public void LogHelp() {}@Pointcut("@annotation(自定義注解路徑)")public void noAnnotation() {}final Logger logger = tools_log.getLogger(this.getClass());@Around("LogHelp()&&!noAnnotation()")public Object arround(ProceedingJoinPoint joinPoint) {MDC.put("REQUESTID", UUID.randomUUID().toString());logger.info("方法環(huán)繞start.....");// 接收到請(qǐng)求,記錄請(qǐng)求內(nèi)容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 記錄下請(qǐng)求內(nèi)容logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP_METHOD : " + request.getMethod());logger.info("IP : " + request.getRemoteAddr());logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());logger.info("ARGS : " + JSON.toJSONString(joinPoint.getArgs()));try {Object o = joinPoint.proceed();logger.info("方法環(huán)繞proceed,結(jié)果是 :" + o);return o;} catch (Throwable e) {logger.error(e.toString());return null;} finally {MDC.clear();}} }//end.. 表示匹配多個(gè)參數(shù)
* ?表示匹配一個(gè)參數(shù)
.* 表示匹配多個(gè)類
?
自定義注解
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface noAroundAnno { }//end定義在方法上
?
轉(zhuǎn)載于:https://www.cnblogs.com/hcfan/p/9986185.html
總結(jié)
以上是生活随笔為你收集整理的springBoot AOP环绕增强、自定义注解、log4j2、MDC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集群IPtables转发与防火墙
- 下一篇: Graph_Master(连通分量_Po