网站一年得多少钱,网站开发实训周报,wordpress如何放入域名,宣传册设计与制作模板我们经常会被问到这样一个问题。你接口返回的好慢呀#xff0c;能不能提升一下接口响应时间啊#xff1f;这个时候我们就需要去分析#xff0c;为什么慢#xff0c;慢在哪。而这首先应该做的就是确定接口返回时间过长确实是在服务内消耗的时间。而不是我们将请求发给网关或…我们经常会被问到这样一个问题。你接口返回的好慢呀能不能提升一下接口响应时间啊这个时候我们就需要去分析为什么慢慢在哪。而这首先应该做的就是确定接口返回时间过长确实是在服务内消耗的时间。而不是我们将请求发给网关或者nignx由nignx或者网关转发给我们服务的过程消耗时间。
这个时间我们就需要借助我们的acccess日志和out日志了。
1借助tomcat实现access日志打印
首先说一点总所周知的内容我们都知道tomcat是有access日志的所以简单通过tomcat配置实现应该不难。大概的配置如下都做了解释说明。 # 开启Tomcat的访问日志
server.tomcat.accesslog.enabledtrue# 指定日志文件的路径例如在当前项目根目录下生成名为 access.log 的日志文件
# 指定Tomcat访问日志文件的目录。默认值logs
server.tomcat.accesslog.directory./
# 指定Tomcat访问日志文件的前缀。默认值access_log
server.tomcat.accesslog.prefixaccess
# 指定Tomcat访问日志文件的后缀。默认值.log
server.tomcat.accesslog.suffix.log# 配置 Tomcat 访问日志文件名中日期部分的格式。默认值是 logback-ext表示使用 Logback 默认的日期格式
server.tomcat.accesslog.file-date-format.yyyy-MM-dd# 是用于配置 Tomcat 访问日志的格式模式
# 以下是一些常见的日志模式格式
# %h远程主机名
# %l远程登录名
# %u远程用户
# %t日期和时间使用 Common Log Format 的格式例如[10/Oct/2000:13:55:36 -0700]
# %r请求的第一行
# %sHTTP状态码
# %b响应内容长度以字节为单位省略则表示 -
# %{xxx}i请求头中的指定字段
# %{xxx}o响应头中的指定字段
server.tomcat.accesslog.pattern%h %l %u %t %r %s %b %D# Tomcat访问日志文件轮换时是否重命名旧日志文件
# 设置为 true则旧的访问日志文件在轮换时会被重命名文件名会添加一个时间戳或者序号作为后缀。
# 如果设置为 false则旧的访问日志文件不会被重命名而是直接覆盖或者删除。
server.tomcat.accesslog.rename-on-rotatefalse# 用于配置是否在Tomcat访问日志中记录请求的属性。默认为 false。
# 设置为 trueTomcat访问日志将包含额外的请求属性信息这些属性信息通常是通过Servlet容器或者应用程序添加到请求中的。
# 这些额外的属性可以包括HTTP请求的各种元数据例如请求的方法、协议、URI等等
server.tomcat.accesslog.request-attributes-enabledfalse# Tomcat访问日志的轮换策略。设置为 trueTomcat访问日志将在达到一定大小限制时进行轮换以防止日志文件过大。
# 一旦达到了指定的大小限制Tomcat会停止往当前日志文件中写入内容并创建一个新的日志文件继续记录访问日志。
server.tomcat.accesslog.rotatetrue# 设置Tomcat访问日志文件的最大大小。可以指定大小如 10MB 或 100KB也可以使用 -1 表示不限制大小默认为 -1。
server.tomcat.accesslog.max-file-size10MB# 设置HTTP POST请求的最大大小以字节为单位。默认值2097152字节即2MB
# server.tomcat.max-http-post-size# 设置HTTP请求头的最大大小以字节为单位。默认值0表示不限制大小
# server.tomcat.max-http-header-size# 设置URI编码用于解析URL中的参数。默认值UTF-8
# server.tomcat.uri-encoding# 设置Tomcat服务器的最大线程数用于处理请求。默认值200
# server.tomcat.max-threads# 设置客户端和服务器之间的连接超时时间以毫秒为单位。默认值-1表示不设置超时
# server.tomcat.connection-timeout
我们配置好了然后兴致冲冲地去运行项目一看发现咋没打印呢我不是开启了tomcat日志了么
在 Tomcat 中访问日志是由 Tomcat 的 AccessLogValve 来处理的而不是由 Logback。因此如果已经在 Logback 中配置了日志输出可能会影响到 Tomcat 的访问日志的输出。
这里可能需要做别的配置我这里介绍几种方法。
2借助拦截器interceptor实现
package com.luojie.config.logconfig;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration
public class WebMvcConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new AccessLogInterceptor());}
}
package com.luojie.config.logconfig;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;Slf4j
public class AccessLogInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {log.info(From Interceptor Request IN URL: {} - Method: {} -IP:{}, request.getRequestURL(), request.getMethod(), request.getRemoteAddr());return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// Do nothing}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// Do nothinglog.info(From Interceptor Request OUT URL: {} - Method: {} -IP:{}, request.getRequestURL(), request.getMethod(), request.getRemoteAddr());}
}
3借助aop实现
package com.luojie.config.logconfig;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;Aspect // 表示该类是一个切面类
Component // 将该类注册为一个bean放入IOC容器
Slf4j
public class LogAspectConfig {Autowiredprivate HttpServletRequest request;Pointcut(value execution(* com.luojie.controller.*.*(..)))public void pointcut() {}Before(value pointcut())public void before(JoinPoint joinPoint) {String name joinPoint.getSignature().getName(); // 获取方法名Object[] args joinPoint.getArgs();// 获取参数列表
// log.info(前置通知 开启调用方法名{} 参数{}, name, Arrays.toString(args));log.info( From AOP Request In URL: {} - Method: {} -IP:{}, request.getRequestURL(), request.getMethod(), request.getRemoteAddr());}After(value pointcut())public void after(JoinPoint joinPoint) {String name joinPoint.getSignature().getName(); // 获取方法名
// log.info(后置通知 开启调用方法名{}, name);log.info( From AOP Request Out URL: {} - Method: {} -IP:{}, request.getRequestURL(), request.getMethod(), request.getRemoteAddr());}}aop的使用不知道的可以详细查看Spring AOP基本认识与使用-CSDN博客
4修改logback.xml文件目的所有进出日志统一保存到同一个文件且无其它日志
?xml version1.0 encodingUTF-8?
configuration!-- 定义输出到控制台的日志记录器 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoder!-- 设置日志输出格式 --pattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern
!-- pattern${ACCESS_LOG_PATTERN}/pattern--/encoder/appenderappender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfilelogs/mylog.log/filerollingPolicy classch.qos.logback.core.rolling.FixedWindowRollingPolicy!-- 日志文件名称格式按日期滚动 --fileNamePatternlogs/mylog.%d{yyyy-MM-dd}.%i.log.zip/fileNamePattern!-- 最多保留的日志文件数量 --maxIndex30/maxIndexminIndex1/minIndex/rollingPolicytriggeringPolicy classch.qos.logback.core.rolling.SizeBasedTriggeringPolicy!-- 单个日志文件大小例如: 千字节:10KB 或 10kb;兆字节:10MB 或 10mb; 以及10GB 或 10gb--maxFileSize10MB/maxFileSize/triggeringPolicyencoderpattern%date [%thread] %-5level %logger{35} - %msg%n/pattern/encoder/appender!--打印数据库连接池日志信息--logger namecom.zaxxer.hikari levelDEBUG/!--打印sql信息--logger namecom.luojie.dao levelDEBUG/!--additivityfalse 确保特定类的日志不会传递给跟logger避免重复输出--logger namecom.luojie.config.logconfig levelINFO additivityfalseappender-ref refFILE//logger!-- 设置根日志级别为 INFO --root levelINFOappender-ref refCONSOLE/ !-- 将日志输出到控制台 --/root/configuration
5查看测试结果 希望对各位看官老爷有帮助如果可以的话能否请各位老爷点个赞关注一下博主呢在这里非常感谢各位老爷了。