tomcat配置前台访问日志记录

tomcat的日志分为两部分

一是运行的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息
二是访问日志信息,他是记录的访问的时间,ip,url,sessionId等信息。主要介绍tomcat访问日志的开启和优化记录内容

1.tomcat产生的访问日志【localhost_access_log.Y-M-D.txt】

它记录的访问的时间,IP,访问的资料等相关信息 

2. 首先是配置tomcat访问日志数据,配置的方式如下

打开${catalina}/conf/server.xml文件 — 注:${catalina}是tomcat的安装目录,打开下面注释,重启tomcat即可记录访问日志

《tomcat配置前台访问日志记录》

3.记录访问日志的时间的具体参数

tomcat访问日志格式配置,在config/server.xml里Host标签下加上,以下是我配置的日志格式

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />

具体配置截图如下

《tomcat配置前台访问日志记录》

日志格式如下,红框中为访问时间

《tomcat配置前台访问日志记录》

4.查询访问最耗时的接口 

这就要用到万能的awk了 我们的日志倒数第二列显示的访问时间。 

 cat localhost_access_log.2021-01-23.log  | awk ‘{print $(NF-1)” “$0}’ | sort -n -r| awk ‘{$1=””;print $0}’ 按照倒数第二列由大到小显示接口以及访问时间。

这样我们就能找出那些借口耗时较大,然后对其进行优化,提高用户体验。

 访问时间排序如下 

《tomcat配置前台访问日志记录》

如果想自己定义书写的文件的格式可以对上面的pattern里面的内容进行修改,可以修改的参数有以下数据

具体的日志产生样式说明如下(从官方文档中摘录): 
%a – 远端IP地址
%A – 本地IP地址
%b – 发送的字节数,不包括HTTP头,如果为0,使用”-”
%B – 发送的字节数,不包括HTTP头
%h – 远端主机名(如果resolveHost=false,远端的IP地址)
%H – 请求协议
%l – 从identd返回的远端逻辑用户名(总是返回 ‘-‘)
%m – 请求的方法(GET,POST,等)
%p – 收到请求的本地端口号
%q – 查询字符串(如果存在,以 ‘?’开始)
%r – 请求的第一行,包含了请求的方法和URI
%s – 响应的状态码
%S – 用户的session ID
%t – 日志和时间,使用通常的Log格式
%u – 认证以后的远端用户(如果存在的话,否则为’-‘)
%U – 请求的URI路径
%v – 本地服务器的名称
%D – 处理请求的时间,以毫秒为单位
%T – 处理请求的时间,以秒为单位
另外还可以将cookie, 客户端请求中带的HTTP头(incoming header), 会话(session)或是ServletRequest中的数据都写到Tomcat的访问日志中,你可以用下面的语法来引用。 
%{xxx}i – 记录客户端请求中带的HTTP头xxx(incoming headers) 
%{xxx}c – 记录特定的cookie xxx 
%{xxx}r – 记录ServletRequest中的xxx属性(attribute) 
%{xxx}s – 记录HttpSession中的xxx属性(attribute)  

5.记录Post请求参数使用postdata过滤器

package com.xiaoxiliu
 
import java.io.IOException;
import java.util.Enumeration;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public final class PostDataDumperFilter implements Filter {
 
	Logger logger = LoggerFactory.getLogger(getClass());
 
	private FilterConfig filterConfig = null;
 
	public void destroy() {
		this.filterConfig = null;
	}
 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		if (filterConfig == null)
			return;
 
		Enumeration<String> names = request.getParameterNames();
		StringBuilder output = new StringBuilder();
		while (names.hasMoreElements()) {
			String name = (String) names.nextElement();
			output.append(name).append("=");
			String values[] = request.getParameterValues(name);
			for (int i = 0; i < values.length; i++) {
				if (i > 0) {
					output.append("' ");
				}
 
				output.append(values[i]);
			}
			if (names.hasMoreElements())
				output.append("&");
		}
		request.setAttribute("postdata", output);
		logger.debug("postdata: " + output);
		chain.doFilter(request, response);
	}
 
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
	}
}

 在web.xml中添加配置该filter

<filter>
<filter-name>post-data-dumper-filter</filter-name>
<filter-class>com.xiaoxiliu.PostDataDumperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>post-data-dumper-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

    原文作者:^止境^
    原文地址: https://blog.csdn.net/qq_19897551/article/details/113047947
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞