卖设计图的网站,低代码开发平台公司,网络品牌营销案例,php网站制作费用springboot_tomcat开启access log日志#xff0c;监控打印每个请求地址和响应时间 一、前言二、环境三、配置对应的对象信息四、AccessLog配置默认值及说明五、配置实例六、pattern参数组成说明七、常用的pattern配置7.1 pattern默认值7.2 默认配置说明7.3 打印请求、响应中co… springboot_tomcat开启access log日志监控打印每个请求地址和响应时间 一、前言二、环境三、配置对应的对象信息四、AccessLog配置默认值及说明五、配置实例六、pattern参数组成说明七、常用的pattern配置7.1 pattern默认值7.2 默认配置说明7.3 打印请求、响应中cookie、header中的内容 八、总结 一、前言
springboot 1.x 内置tomcat服务器其中的access log日志可以记录每次请求、响应的一些关键信息这为我们排查分析系统性能有很大的帮助。 但springboot默认是不开启access log的下面介绍下access log的开启方式和一些日志格式配置。
二、环境
jdk 8srpingboot 1.56windows 10
三、配置对应的对象信息
springboot的每个yml文件中的配置项都会有与之对应的一个java对象与之对应对象上一般使用ConfigurationProperties注解自动加载配置如果没有在yml中显示的加入配置项该类也可以提供默认的阈值。tomcat的access log配置也有相应的配置类。如下
package org.springframework.boot.autoconfigure.web;
...
ConfigurationProperties(prefix server, ignoreUnknownFields true)
public class ServerPropertiesimplements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {public static class Tomcat {public static class Accesslog {...}}
}jar包spring-boot-autoconfigure-1.5.6.RELEASE.jar 配置类org.springframework.boot.autoconfigure.web.ServerProperties.Tomcat.Accesslog 该类是个内部类位置是org.springframework.boot.autoconfigure.web.ServerProperties - Tocat - Accesslog
通过分析ServerProperties对象我们可以知道access log在yml中的配置路径即server.tomcat.accesslog 。
四、AccessLog配置默认值及说明
属性默认值说明enabledfalse开启访问日志。pattern“common”访问日志的格式模式。directory“logs”创建日志文件的目录。可以是相对于tomcat基本目录或绝对目录。prefix“access_log”日志文件名前缀。suffix“.log”日志文件名后缀。rotatetrue默认为true。这个参数决定是否需要切换切换日志文件如果被设置为false则日志文件不会切换即所有文件打到同一个日志文件中并且fileDateFormat参数也会被忽略。小心使用这个参数。renameOnRotatefalse是否推迟将日期戳包含在文件名中,为true的情况下当天的日志文件是没有日期后缀的(如:access_log.txt),每天日期切换时当天文件重命名为前一天日期后缀同时新生成当天文件。fileDateFormat“.yyyy-MM-dd”日志文件名称中的日期格式默认为.yyyy-MM-dd。requestAttributesEnabledfalse为请求设置IP地址、主机名、协议和端口的请求属性。bufferedtrue缓冲输出使其只定期刷新。
五、配置实例
server:tomcat:accesslog:enabled: truepattern: %{yyyy-MM-dd HH:mm:ss}t %a %A %m %s %D %b %I %U%q %{User-Agent}idirectory: D:\logs\projectName\prefix: accesslogsuffix: .logfileDateFormat: _yyyyMMddrotate: truerenameOnRotate: falsebuffered: truerequestAttributesEnabled: true六、pattern参数组成说明
pattern属性由一系列的字符串参数组成每个参数都有前缀%目前支持下面这些参数
%a - 远程IP地址%A - 本地IP地址%b - 发送的字节数(Bytes sent), 不包括HTTP headers的字节如果为0则展示’-’%B - 发送的字节数(Bytes sent), 不包括HTTP headers的字节%h - 远程主机名称(如果resolveHosts为false则展示IP)%H - 请求协议%l - 远程用户名始终为’-(Remote logical username from identd)%m - 请求的方法(GET, POST等)%p - 接受请求的本地端口%q - 查询字符串如果存在有一个前置的’?’%r - 请求的第一行(包括请求方法和请求的URI)%s - response的HTTP状态码(200,404等)%S - 用户的session ID%t - 日期和时间Common Log Format格式使用%{yyyy-MM-dd HH:mm:ss}t控制格式化输出。%u - 被认证的远程用户, 不存在则展示’-’%U - 请求URL路径%v - 本地服务名%D - 处理请求的时间单位为毫秒%T - 处理请求的时间单位为秒%I - 当前请求的线程名(can compare later with stacktraces)
七、常用的pattern配置
7.1 pattern默认值
其中pattern参数有两个默认模式common、combined模式使用方式为
server:tomcat:accesslog:pattern: combined #或common7.2 默认配置说明
common 默认配置%h %l %u %t %r %s %b combined 默认配置%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i模式的pattern增加Referer和User-Agent headers的参数形式。比如%{User-Agent}i 即请求的User-Agent值(客户端浏览器)。 自定义的配置 常规 %{yyyy-MM-dd HH:mm:ss}t %a %A %m %s %D %b %I %U%q请求时间 远端IP 本地IP 方法 状态码 耗时(毫秒) 发送字节数 线程名 请求地址查询参数%A本机IP这个选项如果不做集中日志收集不太需要改值 常规ua %{yyyy-MM-dd HH:mm:ss}t %a %A %m %s %D %b %I %U%q %{User-Agent}i请求时间 远端IP 本地IP 方法 状态码 耗时(毫秒) 发送字节数 线程名 请求地址查询参数 请求UA%A本机IP这个选项如果不做集中日志收集不太需要改值 不写本地IP %{yyyy-MM-dd HH:mm:ss}t %a %m %s %D %b %I %U%q请求时间 远端IP 方法 状态码 耗时(毫秒) 发送字节数 线程名 请求地址查询参数 写入useragent %{yyyy-MM-dd HH:mm:ss}t %a %m %s %D %b %I %U%q %{User-Agent}i请求时间 远端IP 本地IP 方法 状态码 耗时(毫秒) 发送字节数 线程名 请求地址查询参数 请求UA
7.3 打印请求、响应中cookie、header中的内容
Access Log中也支持cookie请求header响应headersSession或者其他在ServletRequest中的对象的信息下面的xxx为有效的参数名。 如输出User-Agent要写成%{User-Agent}i。
%{xxx}i 请求头中指定参数的值。%{xxx}o 响应头中指定参数的值。%{xxx}c cookie中指定参数的值。%{xxx}r ServletRequest对象属性值。%{xxx}s HttpSession对象属性值。%{xxx}p 写本地(服务器)端口(xxxlocal)或远程(客户端)端口(xxxremote)。%{xxx}t 控制日期和时间的格式化输出。
八、总结
通过记录access log可以排查每个请求的一些关键信息。分析出那些地址是常用的请求那些服务耗时严重那些时间段的请求量大等信息。 这些信息可以通过日志分析工具去分析也可以使用awk命令实时统计。