日志格式配置
位置在服务下 config/server.xml 中Host标签下:
1 | <Host name="localhost" appBase="webapps"unpackWARs="false" autoDeploy="false"> |
参数说明
| Key | Value |
|---|---|
| className | 官方文档:This MUST be set to org.apache.catalina.valves.AccessLogValve to use the default access log valve |
| directory | 日志文件存放的目录。通常设置为tomcat下已有的那个logs文件。 |
| prefix | 日志文件的名称前缀。 |
| suffix | 日志文件的名称后缀。 |
| pattern | 主要参数,见下文 |
| resolveHosts | 如果是true,tomcat会将这个服务器IP地址通过DNS转换为主机名;如果是false,就直接写服务器IP地址啦。默认false。 |
| rotatable | 默认为true,tomcat生成的文件名为prefix(前缀)+.+时间(一般是按天算)+.+suffix(后缀),如:localhost_access_log.2007-09-22.txt。设置为false的话,tomcat会忽略时间,不会生成新文件,文件名就是:localhost_access_log.txt。长此以往,这个日志文件会超级大 |
| condition | 这个参数不太实用,可设置任何值,比如设置成condition=”tkq”,那么只有当ServletRequest.getAttribute(“tkq”)为空的时候,该条日志才会被记录下来 |
| fileDateFormat | 时间格式,是针对日志文件名起作用的。咱们生成的日志文件全名:localhost_access_log.2016-09-22.txt,这里面的2016-09-22就是这么来的。如果想让tomcat每小时生成一个日志文件,也很简单,将这个值设置为:fileDateFormat=”yyyy-MM-dd.HH” |
pattern设置
1 | %a 这是记录访问者的IP,在日志里是127.0.0.1 |
awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用格式:awk ‘{pattern + action}’ {filenames}
- awk内置变量
1
2
3
4
5
6
7
8
9
10
11
12
13ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
$NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数
- 按条件查询
awk ‘{if($13>3000){print $0}}’ |more -10 - 按时间查询:
awk ‘{split($4,array,”[“);if(array[2]>=”26/Sep/2019:17:40:00” && array[2]<=”26/Sep/2019:17:41:00”){print $0}}’ access.2019-09-26.log |more -10