SpringBoot如何配置tomcat access日志

 更新时间:2024年05月27日 10:52:54   作者:yifanghub  
access日志记录了每一个HTTP请求的信息,包括请求的来源、请求的资源、响应状态码等,常常用来做数据统计、性能监控,比如通过分析访问日志,可以发现性能瓶颈和优化机会,提升应用的响应速度等,这篇文章主要介绍了SpringBoot配置tomcat access日志,需要的朋友可以参考下

Spring Boot使用嵌入式的Tomcat作为默认的Web服务器,可以通过配置文件方式来开启和定制access日志。access日志记录了每一个HTTP请求的信息,包括请求的来源、请求的资源、响应状态码等,常常用来做数据统计、性能监控,比如通过分析访问日志,可以发现性能瓶颈和优化机会,提升应用的响应速度等。

tomcat access日志配置

以yml文件为例:

server:
  # 配置access日志
  tomcat:
    accesslog:
      enabled: true
      renameOnRotate: true
      pattern: '%{yyyy-MM-dd HH:mm:ss}t "%h" "%{X-FORWARDED-FOR}i" "%l" "%u" "%m" "%U" "%H" "%s" "%b" "%q" "%{Referer}i" "%{User-Agent}i" "%I" "%T"'
      directory: /logs/access/
      prefix: access_log
      suffix: .log

参数说明:

enabled 是否开启access日志
renameOnRotate 是否按天切割日志。切割后的日志要按yyyyMMdd重命名
pattern 日志打印格式
directory 日志保存文件路径
prefix 日志的前缀
suffix 日志的后缀

除了上面几个配置参数,其他常用参数还有:

file-date-format: .yyyy-MM-dd  
basedir: d:/logs
rotate: true
含义如下:
file-date-format 在日志文件名称中使用定制的日期格式,日志的格式也决定了日志文件翻转的频率。如果想每小时翻转一次,可以定义为“yyyy-MM-dd.HH”;
basedir 日志文件存放的基础目录
rotate 指定是否启用日志轮转。默认为true。这个参数决定是否需要切换切换日志文件,如果被设置为false,则日志文件不会切换,即所有文件打到同一个日志文件中,并且file-date-format参数也会被忽略

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格式
%u - 被认证的远程用户, 不存在则展示'-'
%U - 请求URL路径%v - 本地服务名
%D - 处理请求的时间,单位为毫秒
%T - 处理请求的时间,单位为秒%I - 当前请求的线程名(can compare later with stacktraces)
%I - 当前请求线程名(可与堆栈跟踪进行比较)。

access log 也支持将cookie、header、session或者其他在ServletRequest中的对象信息打印到日志中,其配置遵循Apache配置的格式({xxx}指值的名称):

  • %{xxx}i - 记录名称为xxx的请求头的值。
  • %{xxx}o - 记录名称为xxx的响应头的值。
  • %{xxx}c - 记录名称为xxx的Cookie的值。
  • %{xxx}r - 记录名称为xxx的ServletRequest属性的值。
  • %{xxx}s - 记录名称为xxx的HttpSession属性的值。
  • %{xxx}p - 记录本地(服务器)端口(xxx==local)或远程(客户端)端口(xxx=remote)。
  • %{xxx}t - 使用增强的SimpleDateFormat模式xxx记录请求结束时的时间戳。

pattern也可以设置指定的模式,如下:

  • ommon 模式: %h %l %u %t "%r" %s %b 这是Common Log Format的定义,记录了客户端IP地址、远程登录名、用户、时间、请求的第一行、状态码和响应字节数。
  • combined 模式: %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" 在common模式的基础上,增加了Referer和User-Agent请求头的信息。                       

参考链接:
https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html

到此这篇关于SpringBoot配置tomcat access日志的文章就介绍到这了,更多相关SpringBoot配置tomcat access日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 如何调用long的最大值和最小值

    Java 如何调用long的最大值和最小值

    这篇文章主要介绍了Java 如何调用long的最大值和最小值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能

    这篇文章主要为大家详细介绍了使用fileupload实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Java 精炼解读时间复杂度与空间复杂度

    Java 精炼解读时间复杂度与空间复杂度

    对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间,这篇文章主要给大家介绍了关于Java时间复杂度、空间复杂度的相关资料,需要的朋友可以参考下
    2022-03-03
  • 深入解析HashMap的put方法

    深入解析HashMap的put方法

    在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法
    2022-01-01
  • SpringBoot 如何实时刷新静态文件

    SpringBoot 如何实时刷新静态文件

    这篇文章主要介绍了SpringBoot如何实时刷新静态文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Springboot集成JSR303参数校验的方法实现

    Springboot集成JSR303参数校验的方法实现

    这篇文章主要介绍了Springboot集成JSR303参数校验的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java音频处理之音频流转音频文件和获取音频播放时长详解

    Java音频处理之音频流转音频文件和获取音频播放时长详解

    这篇文章主要为大家详细介绍了如何使用Java实现音频流转音频文件和获取音频播放时长功能,文中的示例代码简洁易懂,有需要的小伙伴可以了解下
    2025-07-07
  • SpringBoot使用Redis进行限流功能实现

    SpringBoot使用Redis进行限流功能实现

    Spring Boot中使用Redis实现限流功能是一种常见的做法,特别是在高并发场景下,限流可以有效防止系统过载,保证服务的稳定性,本文就来详细的介绍一下SpringBoot使用Redis进行限流功能实现,感兴趣的可以了解一下
    2025-10-10
  • 关于String转Json的几种方式

    关于String转Json的几种方式

    这篇文章主要介绍了关于String转Json的几种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解Java编程中面向字符的输出流

    详解Java编程中面向字符的输出流

    这篇文章主要介绍了Java编程中面向字符的输出流,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10

最新评论