1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置
2.新建 resources/log4j.properties
我的设置为:
# LOG4J\u914D\u7F6E log4j.rootCategory=INFO, stdout, file, errorfile log4j.category.com.wutongshu=DEBUG, bootfile log4j.logger.error=errorfile # \u63A7\u5236\u53F0\u8F93\u51FA log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n # root\u65E5\u5FD7\u8F93\u51FA log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.file=logs/all.log log4j.appender.file.DatePattern='.'yyyy-MM-dd log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n # error\u65E5\u5FD7\u8F93\u51FA log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.errorfile.file=logs/error.log log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd log4j.appender.errorfile.Threshold = ERROR log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n # com.springboot\u4E0B\u7684\u65E5\u5FD7\u8F93\u51FA log4j.appender.bootfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.bootfile.file=logs/my.log log4j.appender.bootfile.DatePattern='.'yyyy-MM-dd log4j.appender.bootfile.layout=org.apache.log4j.PatternLayout log4j.appender.bootfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
3.然后创建Web层日志切面类,这里我设置的是controller层的所有请求都会打印日志信息
其中@Order(i)表示AOP切面的优先级
在切入点前的操作,按order的值由小到大执行
在切入点后的操作,按order的值由大到小执行
/** * 日志切面类 */ @Aspect @Component @Order(5) public class WebLogAspect { private Logger logger=Logger.getLogger(getClass()); private ThreadLocal<Long> startTime=new ThreadLocal<>(); @Pointcut("execution(public * com.*.*.web.*.*(..))") public void webLog(){ } @Before(value = "webLog()") public void doBefore(JoinPoint point){ startTime.set(System.currentTimeMillis()); logger.info("WebLogAspect.doBefore............"); ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request=attributes.getRequest(); logger.info("IP : "+request.getRemoteAddr()); logger.info("URL:" + request.getRequestURL().toString()); logger.info("HTTP_METHOD:" +request.getMethod()); logger.info("CLASS_NAME : " + point.getSignature().getDeclaringTypeName()+"."+point.getSignature().getName()); logger.info("ARGS : " + Arrays.toString(point.getArgs())); } @AfterReturning(value = "webLog()",returning = "ret") public void doAferReturning(Object ret){ logger.info("WebLogAspect.doAfterReturning............."); logger.info("Resp: " + ret); logger.info("Spend Time : " + (System.currentTimeMillis()-startTime.get())); } }
4.输入http://localhost:8087/test/hello进行测试
可看到控制台输出依次打印出IP,URL,请求方法,请求路径,方法入参以及花费的时间