个人做网络推广哪个网站好/销售的技巧与口才
tomcat的日志分为两部分
一是运行的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息
二是访问日志信息,他是记录的访问的时间,ip,url,sessionId等信息。主要介绍tomcat访问日志的开启和优化记录内容
1.tomcat产生的访问日志【localhost_access_log.Y-M-D.txt】
它记录的访问的时间,IP,访问的资料等相关信息
2. 首先是配置tomcat访问日志数据,配置的方式如下
打开${catalina}/conf/server.xml文件 --- 注:${catalina}是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 "%r" [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />
具体配置截图如下
日志格式如下,红框中为访问时间
4.查询访问最耗时的接口
这就要用到万能的awk了 我们的日志倒数第二列显示的访问时间。
cat localhost_access_log.2021-01-23.log | awk '{print $(NF-1)" "$0}' | sort -n -r| awk '{$1="";print $0}' 按照倒数第二列由大到小显示接口以及访问时间。
这样我们就能找出那些借口耗时较大,然后对其进行优化,提高用户体验。
访问时间排序如下
如果想自己定义书写的文件的格式可以对上面的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.xiaoxiliuimport 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>