1,方便定位问题:当外部人员调用我们的接口时,不用每次都为我们提供完整的URL和参数,只需要提供requestId等关键字即可
然后我们根据requestId来获取到相应的日志
2,方便查询访问情况:当请求我们的接口的不同参数值时可能走了我们不同的业务逻辑分支,此时如果想知道执行业务逻辑A的情况时,只需要根据关键的参数值来搜索对应的日志即可
3,做数据统计:根据访问日志来统计用户情况,QPS等
反正就是有了访问日志好处多多...
其实非常的简单,只需要在spring boot项目的application.yml或application.xml中配置如下信息(我这里选择yml文件):
server:
port: 8080
tomcat:
basedir: /tmp/tomcat
accesslog:
enabled: true
directory: logs
pattern: '"%t","%{Http_X_Forwarded_For}i","%H","%m","%U%q","%s","%A","%D"'
prefix: access_admin
suffix: .log
rename-on-rotate: true
buffered: true
然后重启项目,并进行访问,此时我们可以看到服务器的/tmp/tomcat/下面生成了我们的访问日志信息
别急别急,且听本小哥哥慢慢道来....
basedir: 指定日志文件需要储存的目录(即你想让日志文件放在电脑上的哪个文件夹中)
server.tomcat.accesslog相关的配置参数
enabled:取值true、false,true表示支持打印访问日志,false则表示不需要,我们要打印就当然要设置为true了
当然,有时为了上线后能获取到更好的访问性能,会将访问日志去掉,此时就可以设置为false了
directory:指定日志文件存放的文件夹,放在basedir文件夹内,组成:/tmp/tomcat/logs
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数(Bytes sent), 不包括HTTP headers的字节,如果为0则展示'-'
%B - 发送的字节数(Bytes sent), 不包括HTTP headers的字节
%h - 远程主机名称(如果resolveHosts为false则展示IP)
%H - 请求协议
%l - 远程用户名,始终为'-'(Remote logical username from identd)
%m - 请求的方法(GET, POST等)%p - 接受请求的本地端口
%q - 查询字符串,如果存在,有一个前置的'?'
%r - 请求的第一行(包括请求方法和请求的URI)
%s - response的HTTP状态码(200,404等)%S - 用户的session ID
%t - 日期和时间,Common Log Format格式
%u - 被认证的远程用户, 不存在则展示'-'
%U - 请求URL路径%v - 本地服务名
%D - 处理请求的时间,单位为毫秒
%T - 处理请求的时间,单位为秒%I - 当前请求的线程名(can compare later with stacktraces)
同时也可以指定pattern为Access log自带的内置两个日志格式模板:common、combined
common: %h %l %u %t "%r" %s %b
,依次为:远程主机名称,远程用户名,被认证的远程用户,日期和时间,请求的第一行,response code,发送的字节数
combined: %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
,依次为:远程主机名称,远程用户名,被认证的远程用户,日期和时间,请求的第一行,response code,发送的字节数,request header的Referer信息,request header的User-Agent信息
pattern也支持cookie,请求header,响应headers,Session或者其他在ServletRequest中的对象的信息。格式遵循apache语法:
%{xxx}i 请求headers的信息
%{xxx}o 响应headers的信息
%{xxx}c 请求cookie的信息
%{xxx}r xxx是ServletRequest的一个属性
%{xxx}s xxx是HttpSession的一个属性
如%{Http_X_Forwarded_For}i 获取的是headers中的Http_X_Forwarded_For参数的值
prefix:日志文件名,
rename-on-rotate:是否在旋转时,在文件名中包含日期戳