一般的web server有两部分日志:
一是运行的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息;
二是访问日志信息,他是记录的访问的时间,ip,url,sessionId等信息。

下面来介绍使用tomcat记录访问日志的使用,这个是在tomcat/conf/server.xml文件,需要配置如下的配置:

<!-- Access log processes all example.
     Documentation at: /docs/config/valve.html
     Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" 
suffix=".txt"/>

有的版本可能默认不开启记录,只需要把这解注释就好了,记录的文件默认放在/tomcat/logs/${file},默认是每天产生一个文件,产生的文件类似于:

localhost_access_log.2023-06-11.txt
localhost_access_log.2023-06-12.txt
localhost_access_log.2023-06-13.txt

日志文件里面的内容类似于:

66.249.55.170 - - [11/Jun/2023:00:14:51 +0800] "GET /login HTTP/1.1" 200 6541
101.32.44.117 - - [11/Jun/2023:00:11:56 +0800] "-" 400 -
102.32.11.117 - - [11/Jun/2023:00:12:56 +0800] "-" 401 -
101.32.22.117 - - [12/Jun/2023:00:13:57 +0800] "-" 404 -
103.32.33.117 - - [12/Jun/2023:00:14:57 +0800] "-" 302 -

如果想自己定义书写的文件的格式可以对上面的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)

附:做一个在线分析访问日志的页面

假设pcaccess.log是某应用的accesslog

a.查看日志中访问次数最多的前10个IP

cat pcaccess.log|cut -d ’ ’ -f 1 |sort |uniq -c | sort -nr | awk ‘{print $0 }’ | head -n 10 |less

b.查看日志中出现100次以上的IP

#cat pcaccess.log |cut -d ’ ’ -f 1 |sort |uniq -c | awk ‘{if ($1 > 100) print $0}’|sort -nr |less

c.查看最近访问量最高的URL

假设第九个位置是url,则命令如下:
#cat pcaccess.log |tail -10000|awk ‘{print $9}’|sort|uniq -c|sort -nr|less

左边的数字是出现的次数,右边的参数是对应的URL

d.查看最近访问量最高的页面(.jsp)

#cat pcaccess.log |awk ‘{print $9}’|grep ‘.jsp’|sort|uniq -c|sort -nr |head -n 10

e.查看日志中访问超过100次的页面

#cat pcaccess.log | cut -d ’ ’ -f 9| sort |uniq -c | awk ‘{if ($1 > 100) print $0}’ | less

f.某天访问网站的独立IP有多少

#cat pcaccess.log|grep ‘17/Oct/2012’|grep “******”|wc|awk ‘{print $1}’|uniq

g.统计某类url,一天的访问次数

#cat pcaccess.log |grep ‘17/Oct/2012’|awk ‘{print $9}’|grep ‘/model.html’|wc -l

h.列出传输时间超过 3 秒的文件

首先把请求时间和文件提取出来(假如倒数第四个域是请求时间)

#cat pcaccess.log|awk ‘{print 9 , 9 , 9(NF-4)}’ >timeurl

找出传输时间超过3s的文件

#cat timeurl|awk ‘($NF > 3){print $1,$2}’

找出传输时间超过3s的文件并且出现次数最多的前20个
#cat timeurl|awk ‘($NF > 3){print $1}’|sort -n|uniq -c|sort -nr|head -20

i.列出传输最大的几个exe文件(分析下载站的时候常用)

#cat pcaccess.log |awk ‘($7~/.exe/){print $14,$9}’|sort -nr|head -20

j.统计404的连接

#awk ‘($12 ~/404/)’ pcaccess.log | awk ‘{print $12,$9}’ | sort|uniq -c|sort -nr

k.统计http status

#cat pcaccess.log |awk ‘{counts[$(12)]+=1}; END {for(code in counts) print code, counts[code]}’
#cat pcaccess.log |awk ‘{print $12}’|sort|uniq -c|sort -rn

统计意向 转载于 https://blog.csdn.net/weixin_34406796/article/details/93072464

页面制作中,敬请期待…

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐