springboot_tomcat开启access log日志,监控打印每个请求地址和响应时间

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 8
  • srpingboot 1.56
  • windows 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}i'directory: 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 #或common

7.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,响应headers,Session或者其他在ServletRequest中的对象的信息,下面的xxx为有效的参数名。
如输出User-Agent要写成%{User-Agent}i。

  • %{xxx}i 请求头中指定参数的值。
  • %{xxx}o 响应头中指定参数的值。
  • %{xxx}c cookie中指定参数的值。
  • %{xxx}r ServletRequest对象属性值。
  • %{xxx}s HttpSession对象属性值。
  • %{xxx}p 写本地(服务器)端口(xxx==local)或远程(客户端)端口(xxx=remote)。
  • %{xxx}t 控制日期和时间的格式化输出。

八、总结

通过记录access log,可以排查每个请求的一些关键信息。分析出那些地址是常用的请求,那些服务耗时严重,那些时间段的请求量大等信息。
这些信息可以通过日志分析工具去分析,也可以使用awk命令实时统计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决因找不到qt5core.dll文件而导致无法执行代码问题

Qt5core.dll是Qt5框架的核心模块,用于提供基本的Qt功能。如果在代码执行过程中找不到qt5core.dll,可能导致相关功能无法正常使用。以下是五种详细解决方法、qt5core.dll文件详细介绍以及丢失原因。 一、qt5core.dll文件详细介绍 文件名称:q…

白杨SEO:从董宇辉事件聊聊个人IP这个事,企业为什么要重视个人IP?

董宇辉事件是指东方甄选因主播董宇辉的小作文到底由谁写的风波,具体详情可以网上搜搜,最近是热搜。下图1产生原因,下图2董宇辉回应截图。 白杨SEO说一下,这里不关注谁对谁错。我想说的是,一是现在个人IP非常重要&…

《微信小程序开发从入门到实战》学习五十一

4.5 实现投票小程序服务端功能 4.5.4 获取我的投票信息 最后实现“我的”投票页面。该页面pages/myVote/myVote.js还有一个todo,获取用参与的所有投票的列表。这个功能需要用到用户的openid,因此也需要使用云函数来实现。 新建myVoteList云函数。完成代码将其上传…

C语言结构体小项目之通讯录代码实现+代码分析

一、思路 1.文件 这里由于通讯录实现代码较长,因此分三个文件进行,contact.c用于实现通讯录主体代码,声明各项头文件用contact.h实现,测试用test.c 二.功能 增加联系人删除联系人修改联系人查找指定联系人排序显示通讯录的信息…

Mac 打不开github解决方案

序言 github 时有打不开的情况,为此很是烦恼,这里分享一下如何解决这种问题,其实问题的本质是在访问github网页时无法通过github.com的二级域名进行动态域名解析。 解决方案 手动配置静态文件hosts,将该域名和IP的映射关系添加…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面,这时候点击下载依然可以导出文件,但是文件打不开且接口实际上返回的是401,这是因为文件下载的方式通过window创建a标签的形式打开的,并没有判断token失效问题 const res await this.$axios.…

10:00面试,10:08就出来了,问的问题超出我认知

本来在上家公司上班,加班是每天必不可少的,但是看在加班费给的比较多的份上,就没有太计较了。没想到9月份下一份通知,所有人不准加班,加班费不仅没有了,薪资还要降30%,这下搞的生活都生活不下去了。 还好有…

Dijkstra求最短路 I(Dijkstra算法)

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

vscode 常用 Emmet Abbreviation 快捷方式

vscode 常用 Emmet Abbreviation 快捷方式 输入快捷指令后&#xff0c; 按“tab”键或者回车键 即可 .box*5&#xff1a;生成 5 个 class 为 box 的 div 元素 <div class"box"></div> <div class"box"></div> <div class&quo…

python和pygame实现捉小兔游戏

python和pygame实现捉小兔游戏 python和pygame实现捉小兔游戏&#xff0c;需要安装使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 下面是使用Python和Pygame创建的游戏&#xff0c;其中有…

常用的Linux基本命令

这些是一些常用的Linux基本命令&#xff0c;涵盖了文件操作、系统管理、进程管理、磁盘管理等方面&#xff1a; ls&#xff1a;列出目录内容cd&#xff1a;切换当前工作目录pwd&#xff1a;显示当前工作目录的绝对路径mkdir&#xff1a;创建新目录rmdir&#xff1a;删除空目录…

Pytorch从零开始实战13

Pytorch从零开始实战——ResNet与DenseNet探索 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet与DenseNet探索环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;P…

Java连接数据库实现用户登录和注册功能

目录 需求内容如下 示例代码 数据库studb Java代码 效果图 需求内容如下 1&#xff0c;创建数据库studb 2&#xff0c;库中添加用户表userinfo,包含如下字段 用户id ,用户名&#xff0c;用户密码&#xff0c;用户权限 &#xff08;数据类型和约束自己定义&#xff09…

web微服务规划

一、背景 通过微服务来搭建web系统&#xff0c;就要对微服务进行规划&#xff0c;包括服务的划分&#xff0c;每个服务和数据库的命名规则&#xff0c;服务用到的端口等。 二、微服务划分 1、根据业务进行拆分 如&#xff1a; 一个购物系统可以将微服务拆分为基础中心、会员…

SpringMVC异常处理机制

2.1 异常描述 在J2EE项目的开发中&#xff0c;不管是对底层的数据库操作过程&#xff0c;还是业务层的处理过程&#xff0c;还是控制层的处理过程&#xff0c;都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常&#xff0c;系统的代码耦合度高&a…

【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]

阅读导航 引言一、thread类的简单介绍二、线程函数详细介绍1. start() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 2. join() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 3. detach() 函数&#xff08;1&#xff09;头…

LeetCode Hot100 25.K个一组翻转链表

题目&#xff1a; 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯…

7+m6A+分型+实验,甲基化方向的生信思路,没有思路的同学可参考

今天给同学们分享一篇生信文章“Landscape analysis of m6A modification regulators related biological functions and immune characteristics in myasthenia gravis”&#xff0c;这篇文章发表在J Transl Med期刊上&#xff0c;影响因子为7.4。 结果解读&#xff1a; MG相…

快速文件搜索软件 Everything-voidtools

Everything 文件搜索软件 "Everything"是一款快速、轻巧且高效的桌面搜索引擎软件&#xff0c;专门用于在 Windows 操作系统上搜索文件和文件夹。它的主要特点是超快的搜索速度和精准的搜索结果&#xff0c;能够让用户快速找到他们需要的文件或文件夹。 1. 快速搜…

IDEA小技巧

目录 1. IDEA自动添加注释 创建类的时候自动添加注释 创建函数、方法的注释 1. IDEA自动添加注释 参考文档&#xff1a;idea java 自动添加文件注释 idea新建类自动注释_mob6454cc73c728的技术博客_51CTO博客 【操作工具】IDEA创建类及已有类添加注释-详细操作_idea设置创建…