本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/79960712
1,关于tomcat日志
首先,做app 开发都是使用rest 接口的,但是没有cookie 登录信息啥的。
一般登录之后在 head 放个 token 信息。用来验证用户登录。
把这个token 反应到 access log 上面就可以进行数据统计了。
2,修改tomcat 日志格式
tomcat 日志格式:
https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
还有中文日志格式:
http://www.cnblogs.com/chrischennx/p/6746214.html
写的很详细了。
直接修改成这个配置:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %{X-Forwarded-For}i "%{yyyy-MM-dd HH:mm:ss}t" "%r" %{token}i %s %b" />
<!-- default pattern="%h %l %u %t "%r" %s %b" />-->
</Host>
直接把 head 头信息中的token 打印出来了,同时讲时间进行格式化。
变成 yyyy-MM-dd HH:mm:ss 方便处理了。可以直接处理了。
同时把 nginx 透传的 真实ip 也显示。
把日期增加 两个双引号 "%{yyyy-MM-dd HH:mm:ss}t" 方便pandas 读取。
测试:
curl http://localhost:8080/aabb -H "token: 222"
然后就可以看到 token 已经增加到了 tomcat access 的log里面了。
3,读取日志
测试日志如下:
127.0.0.1 127.0.0.1 "2018-04-16 15:01:46" "GET /api/v1/user HTTP/1.1" 123344 200 110
127.0.0.1 127.0.0.1 "2018-04-16 15:01:47" "GET /api/v1/user/aa HTTP/1.1" 123344 200 110
127.0.0.1 127.0.0.1 "2018-04-16 15:01:48" "GET /api/v1/user/bb HTTP/1.1" 123355 200 110
127.0.0.1 127.0.0.1 "2018-04-16 15:01:40" "GET /api/v1/user/cc HTTP/1.1" 123366 200 110
127.0.0.1 127.0.0.1 "2018-04-16 15:02:46" "GET /api/v1/user HTTP/1.1" 123344 200 110
import pandas as pd
aa = pd.read_csv("/data/tomcat.log",sep=' ',names=['ip','realIp','time','url','token','status','bytes'])
>>> aa
ip realIp time url \
0 127.0.0.1 127.0.0.1 2018-04-16 15:01:46 GET /api/v1/user HTTP/1.1
1 127.0.0.1 127.0.0.1 2018-04-16 15:01:47 GET /api/v1/user/aa HTTP/1.1
2 127.0.0.1 127.0.0.1 2018-04-16 15:01:48 GET /api/v1/user/bb HTTP/1.1
3 127.0.0.1 127.0.0.1 2018-04-16 15:01:40 GET /api/v1/user/cc HTTP/1.1
4 127.0.0.1 127.0.0.1 2018-04-16 15:02:46 GET /api/v1/user HTTP/1.1
token status bytes
0 123344 200 110
1 123344 200 110
2 123355 200 110
3 123366 200 110
4 123344 200 110
然后就可以操作pandas 数据对象了。
参考:
http://pandas.pydata.org/pandas-docs/stable/io.html
http://blog.mmast.net/read-apache-access-log-pandas
4,总结
修改下了tomcat 日志,然后将日志文件作为 一个 csv 文件,
使用pandas 直接读取,然后就转换了。非常方便。
也不用找啥工具去处理日志了。非常方便。
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/79960712