欢迎您, 来到 宁时修博客.^_^

Tomcat----07、Tomcat 8 访问日志 json 化

2019/05/23 言则行 Linux,Tomcat 557
JSON化Tomcat 访问日志 localhost_access

一、Tomcat访问日志JSON化

    使用ELKB收集Tomcat访问日志,JSON化使得格式清晰。

    修改Tomcat的server.xml文件:

    原来的配置:

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

    修改后的配置:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
    prefix="localhost_access" suffix=".log"
    rotatable="false" resolveHosts="false" 
    pattern="{&quot;client_ip&quot;:&quot;%h&quot;, &quot;client_user&quot;:&quot;%l&quot;, 
    &quot;authenticated&quot;:&quot;%u&quot;, &quot;request_time&quot;:&quot;%t&quot;, 
    &quot;request_url&quot;:&quot;%r&quot;, &quot;http_code&quot;:&quot;%s&quot;, 
    &quot;send_bytes&quot;:&quot;%b&quot;, &quot;Query?string&quot;:&quot;%q&quot;, &quot;http_referer&quot;:&quot;%{Referer}i&quot;, &quot;user_agent&quot;:&quot;%{User-Agent}i&quot;, &quot;request_time&quot;:&quot;%D&quot;}" />

    日志格式配置简单解释:

    以 &quot;clientip&quot;:&quot;%h&quot; 为例,其中的 &quot 就是双引号,被两个 &quot 中的 client_ip 是key, %h是一个值,这个值也是必须Tomcat中支持的。


    修改后重启Tomcat,查看访问日志:

{"client_ip":"172.16.6.12", "client_user":"-", "authenticated":"-", "request_time":"[23/May/2019:09:40:59 +0000]", "request_url":"GET /solr/city/select?fl=id%2Clng%2Clat%2CcountyName%2CstateName%2CstateId%2CcityAscii&start=0&rows=100&sort=population+desc&q=*%3A*&fq=copy_region%3A85024&wt=javabin&version=2 HTTP/1.1", "http_code":"200", "send_bytes":"333", "Query?string":"?fl=id%2Clng%2Clat%2CcountyName%2CstateName%2CstateId%2CcityAscii&start=0&rows=100&sort=population+desc&q=*%3A*&fq=copy_region%3A85024&wt=javabin&version=2", "http_referer":"-", "user_agent":"Solr[org.apache.solr.client.solrj.impl.HttpSolrClient] 1.0", "request_time":"1"}
{"client_ip":"172.16.6.12", "client_user":"-", "authenticated":"-", "request_time":"[23/May/2019:09:40:59 +0000]", "request_url":"GET /solr/city/select?fl=id%2Clng%2Clat%2CcountyName%2CstateName%2CstateId%2CcityAscii&start=0&rows=100&sort=population+desc&q=*%3A*&fq=copy_region%3A85024&wt=javabin&version=2 HTTP/1.1", "http_code":"200", "send_bytes":"333", "Query?string":"?fl=id%2Clng%2Clat%2CcountyName%2CstateName%2CstateId%2CcityAscii&start=0&rows=100&sort=population+desc&q=*%3A*&fq=copy_region%3A85024&wt=javabin&version=2", "http_referer":"-", "user_agent":"Solr[org.apache.solr.client.solrj.impl.HttpSolrClient] 1.0", "request_time":"1"}



二、Tomcat访问日志配置说明

className官方文档:This MUST be set to org.apache.catalina.valves.AccessLogValve to use the default access log valve。(必须将其设置为 org.apache.catalina.valves.AccessLogValve 才能使用默认的访问日志格式)
directory

设置日志文件的目录的绝对路径名或相对路径名。如果指定了相对路径,则将其解释为相对路径 $CATALINA_BASE。如果未指定目录属性,则默认值为“logs”(相对路径 $ CATALINA_BASE)。

prefix日志文件的名称前缀,默认"localhost_access_log"。
suffix日志文件的名称后缀,默认".txt" 。
fileDateFormat

日志文件名的自定义时间格式。默认“.yyyy-MM-dd”,每天都会生成新的日志文件。

如果想让tomcat每小时生成一个日志文件,将这个值设置为:fileDateFormat="yyyy-MM-dd.HH",当然也可以按分钟生成。

rotatable

默认为true,tomcat每天自动生成日志文件,名为prefix(前缀)+.+时间(一般是按天算)+.+suffix(后缀),如:localhost_access_log.2019-05-22.txt。

设置为false,tomcat不会每天生成新日志文件,文件名就是:prefix(前缀)+suffix(后缀)。

resolveHosts

不再支持此属性。请改用连接器属性enableLookups。


如果您已将enableLookups连接器设置为 true,并且想要忽略它,请在pattern值中使用 %a 而不是 %h。

pattern日志内容格式,最主要参数,下面讲


    着重讲下pattern。它的参数比较多。可以设置成common,combined两种格式。

    

    简写模式pattern="common" 对应于'%h%l%u%t“%r”%s%b'定义的通用日志格式 。

    简写模式pattern="combined" 将 每个双引号中的Referer和User-Agent标题的值附加到common模式。


common :%h %l %u %t %r %s %b
combined :%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i
%a - 远程IP
%A - 本地IP
%b - 发送的字节数,不包括HTTP头,如果为零显示“-”
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名(如果enableLookups连接器为false,则为IP地址)
%H - 请求协议
%l - 记录浏览者进行身份验证时提供的名字,没有则显示“-”
%m - 请求方法(GET、POST等)
%p - 接收请求的本地端口
%q - 查询字符串(如果存在,以“?”开头)
%r - 请求的第一行(方法和请求URI)
%s - HTTP响应状态码
%S - 用户的session ID
%t - 日期和时间,采用普通日志格式,记录当前请求时的时间
%u - 已验证的远程用户(如果有),否则为“-”
%U - 请求的URL路径
%v - 本地服务器名称
%D - 处理请求所用的时间,毫秒
%T - 处理请求所用的时间(秒)
%F - 提交响应所用的时间,毫秒
%I - 当前请求线程名(可以稍后与stacktrace进行比较)

    官方文档:http://tomcat.apache.org/tomcat-8.0-doc/config/valve.html


    还支持写入信息传入或传出标头,cookie,会话或请求属性以及特殊时间戳格式。它以Apache HTTP Server 日志配置语法为模型 。它们中的每一个都可以使用不同的xxx键多次使用:

%{xxx}i 使用名称写入传入标头的值 xxx
%{xxx}o 用名称写出传出头的值 xxx
%{xxx}c 用名字写下cookie的值 xxx
%{xxx}r 用名称写ServletRequest属性的值 xxx
%{xxx}s 用名称写入HttpSession属性的值 xxx
%{xxx}p写本地(服务器)端口(xxx==local)或远程(客户端)端口(xxx=remote)
%{xxx}t 在使用增强的SimpleDateFormat模式格式化的请求结束时写入时间戳 xxx


点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群