TOMCAT 开启访问日志功能(ACCESS LOG)
tomcataccess日志详解

tomcataccess⽇志详解配置在:/home/admin/wdetail/conf/tomcat-server.xml开启⽇志将下⾯内容的注释去掉:<valve classname="org.apache.catalina.valves.AccessLogValve" <="" div="" style="word-wrap: break-word;">prefix="localhost_access_log." suffix=".log"pattern="common" directory="${jboss.server.home.dir}/log"resolveHosts="false" />pattern 项的修改,可以改变⽇志输出的内容。
该项值可以为: common 与 combined ,这两个预先设置好的格式对应的⽇志输出内容如下:common 的值: %h %l %u %t %r %s %bcombined 的值: %h %l %u %t %r %s %b %{Referer}i %{User-Agent}ipattern的格式也可以⾃定义:<valve classname="org.apache.catalina.valves.AccessLogValve" <="" div="" style="word-wrap: break-word;">prefix="localhost_access_log." suffix=".log"pattern="%{X-Real-IP}i %a %l %u %D %t %r %s %b %{Referer}i %{User-Agent}i" directory="${jboss.server.home.dir}/../logs" resolveHosts="false" />这⾥log的路径可以更改:directory="${jboss.apphome.dir}/logs"jboss.apphome.dir这个变量必须要到jbossctl⾥去定义,加到JAVA_OPTS⾥⾯去:JAVA_OPTS="${JAVA_OPTS} -Djboss.apphome.dir=$BASE_HOME"碰到问题,jboss记录的ip不是真实ip,需要在nginx上配置下:proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;pattern的详细说明%a 远端IP%A 本地IP%b 发送的字节数,不包含HTTP头,如果为0,使⽤”-”%B 发送的字节数,不包含HTTP头%h 远端主机名(如果resolveHosts=false),远端的IP%H 请求协议%l 从identd返回的远端逻辑⽤户名,总是返回’-’%m 请求的⽅法%p 收到请求的本地端⼝号%q 查询字符串%r 请求的第⼀⾏%s 响应的状态码%S ⽤户的sessionID%t ⽇志和时间,使⽤通常的log格式%u 认证以后的远端⽤户(如果存在的话,否则为’-’)%U 请求的URI路径%v 本地服务器的名称%D 处理请求的时间,以毫秒为单位%T 处理请求的时间,以秒为单位参数/选项说明:className: 实现的java类名,必须设置成org.apache.catalina.valves.AccessLogValve;directory: 存放⽇志⽂件的⽬录;pattern: 需要记录的⽇志信息的格式布局,如果是”common”或者”combined”,说明是使⽤的标准记录格式,也有⾃定义的格式,下⾯会详细说明;prefix: ⽇志⽂件名的前缀,如果没有指定,缺省值是”access_log.;(要注意后⾯有个⼩点);resolveHosts: 将远端主机的IP通过DNS查询转换成主机名,设为true。
tomcat常用面试题

tomcat常用面试题当面试Tomcat相关职位时,以下是一些常见的面试问题及参考答案,供您参考:1. 请介绍一下Tomcat?Tomcat是一个开源的Web服务器和Servlet容器,是Apache软件基金会的一个项目。
它实现了Java Servlet、JavaServer Pages (JSP)和Java WebSocket技术,并提供了一个运行这些技术的环境。
Tomcat是当前最流行的Java应用服务器之一。
2. Tomcat和其他Web服务器有什么区别?Tomcat是一个Servlet容器,能够处理Java Servlet和JSP等Java Web技术,而其他Web服务器则可能只能处理静态内容或其他语言的Web应用。
Tomcat是一个轻量级的服务器,非常适合用于开发和测试环境,而其他Web服务器如Apache HTTP Server则更适合用于处理复杂的Web应用和大规模流量。
3. 请解释一下Tomcat的架构?Tomcat的架构包括以下几个主要组件:Connector(连接器)、Container(容器)、Realm(领域)和Processor(处理器)。
- Connector用于接受客户端请求,并将其传递给Tomcat的容器。
- Container负责管理Servlet和JSP等应用组件的生命周期,并处理请求和响应。
- Realm用于进行用户认证和授权等安全相关操作。
- Processor负责处理每个请求,将其传递给适当的容器处理。
4. 如何配置Tomcat的连接器(Connector)?Tomcat支持多种连接器,常用的是HTTP Connector和AJP Connector。
可以通过修改Tomcat的server.xml文件来配置连接器。
例如,可以指定连接器的端口、协议和其他属性,以满足特定的应用需求。
5. 请介绍一下Tomcat的类加载机制?Tomcat使用了一个叫做"Catalina"的类加载器体系。
Tomcat 开启访问日志功能(Access Log)

修改位置如下图具体的解释如下Access Log Valve用来创建日志文件,格式与标准的web server日志文件相同。
可以使用用日志分析工具对日志进行分析,跟踪页面点击次数、用户会话的活动等。
Access Log Valve 的很多配置和行为特性与File Logger相同,包括每晚午夜自动切换日志文件。
Access Log Valve可以和任何Catalina容器关联,记录该容器处理的所有请求。
例子如下:<Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log." suffix=".txt"pattern="%{X-Forwarded-For-Pound}i %l %u %t "%r" %s %b %T"%{HTTP_X_UP_CALLING_LINE_ID}i" "%{x-up-calling-line-id}i" "%{User-Agent}i""pattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。
pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。
目前支持如下的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 - 处理请求的时间,以秒为单位运行结果常使用web服务器的朋友大都了解,一般的web server有两部分日志:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息二是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。
tomcat常用的调优参数

tomcat常用的调优参数Tomcat常用的调优参数Tomcat是一个开源的Java Servlet容器,广泛应用于Java Web 应用程序的部署和运行。
为了提高Tomcat的性能和稳定性,我们可以通过调优参数来优化其配置。
本文将介绍一些常用的Tomcat 调优参数,帮助您更好地配置和优化T omcat服务器。
1. 内存设置- -Xms: 设置JVM的初始堆大小,建议设置为物理内存的1/4或1/3。
- -Xmx: 设置JVM的最大堆大小,建议设置为物理内存的1/2或2/3。
- -XX:MaxPermSize: 设置JVM的永久代大小,建议设置为256MB或512MB。
- -XX:MaxMetaspaceSize: 设置JVM的元空间大小,建议设置为256MB或512MB。
2. 线程设置- maxThreads: 设置Tomcat的最大线程数,建议根据服务器的硬件配置和并发请求数进行调整。
- acceptCount: 设置Tomcat接受请求的队列大小,建议设置为200或300。
- connectionTimeout: 设置Tomcat的连接超时时间,建议设置为30秒或60秒。
3. 连接器设置- protocol: 设置连接器的协议,常用的有HTTP/1.1和AJP/1.3。
- port: 设置连接器的监听端口,建议使用80端口作为HTTP连接器的默认端口。
- maxKeepAliveRequests: 设置每个Keep-Alive连接的最大请求数,建议设置为100或200。
- keepAliveTimeout: 设置Keep-Alive连接的超时时间,建议设置为5秒或10秒。
4. 缓存设置- cacheSize: 设置Tomcat的静态文件缓存大小,建议根据静态文件的数量和大小进行调整。
- cacheTTL: 设置静态文件缓存的过期时间,建议设置为1小时或更长。
- cacheObjectMaxSize: 设置缓存对象的最大大小,建议根据缓存对象的平均大小进行调整。
springbootTomcat访问日志

springbootTomcat访问⽇志1.Tomcat设置访问⽇志1 <Host name="localhost" appBase="webapps"2 unpackWARs="true" autoDeploy="true">3 <!--4 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"5 prefix="localhost_access_log." suffix=".txt"6 pattern="%h %l %u %t "%r" %s %b" />7 -->8 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"9 prefix="localhost_access_log." suffix=".txt"10 pattern="%h,%l,%u,%t,%T,"%r",%s,%b,%{Referer}i,"%{User-Agent}i",%{X-Requested-With}i"11 fileDateFormat="yyyy-MM-dd.HH"12 />1314 </Host>2.springboot设置访问⽇志,在properties配置⽂件中添加tomcat⽇志配置1 #内嵌tomcat⽇志2 server.tomcat.accesslog.buffered=true3 server.tomcat.accesslog.directory=/usr/microStorage/tomcatLog4 server.tomcat.accesslog.enabled=true5 #每天保存⼀个6 server.tomcat.accesslog.file-date-format=yyyy-MM-dd7 server.tomcat.accesslog.pattern=%h %l %T %t %r %s %b %{Referer}i %{User-Agent}i8 server.tomcat.accesslog.prefix=access_log9 server.tomcat.accesslog.rename-on-rotate=false10 server.tomcat.accesslog.request-attributes-enabled=false11 server.tomcat.accesslog.rotate=true12 server.tomcat.accesslog.suffix=.log3.⽇志分析,通过正在表达式,将需要分析的信息进⾏正则捕获提取,然后根据需要进⾏相关数据的统计及可视化展⽰ 1public static void parse() throws Exception{2 String path = "D:/logs/localhost_access_log.2018-09-30.11.txt";3 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));4 String line = null;5 String reg = "^(.+?),(.+?),(.+?),(.+?),(.+?),(\\\".+?\\\"),(.+?),(.+?),(.+?),(\\\".+?\\\"),(.+?),(.+?)$";6 Pattern pattern = pile(reg);7while((line=br.readLine())!=null) {8 System.out.println(line);9 Matcher matcher = pattern.matcher(line);10 matcher.matches();11// pattern="%h,%l,%u,%t,%T,"%r",%s,%b,%{Referer}i,"%{User-Agent}i",%{X-Requested-With}i,%{passport}c"12 System.out.println("ip="+matcher.group(1));13 System.out.println("date="+matcher.group(4));14 System.out.println("cost="+matcher.group(5));15 System.out.println("request="+matcher.group(6));16 System.out.println("status="+matcher.group(7));17 System.out.println("bytes="+matcher.group(8));18 System.out.println("Referer="+matcher.group(9));19 System.out.println("User-Agent="+matcher.group(10));20 System.out.println("X-Requested-With="+matcher.group(11));21 System.out.println("passport="+matcher.group(12));22 System.out.println("------------------------------------");23 }24 br.close();25 }。
tomcat访问(access)日志配置和记录Post请求参数

tomcat访问(access)⽇志配置和记录Post请求参数⼀、配置与说明tomcat访问⽇志格式配置,在config/server.xml⾥Host标签下加上<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t "%r" [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />我们在⽇志⽂件中将看到如下⽂本:10.217.14.16 - - [21/Oct/2016:15:48:54 +0800] "POST /updates/related_notice_num.json HTTP/1.0" [channel=App Store&gid=92391918-2173-4A66-8B31-B2FB3F8FB3DF&os=2&plat=2&sver=10.000000&token=MzM1OTc0MjQ1MkB3ZWliby55bXguY29tfHdlaWJvfDQ5ZGFmMjk0YjQ5YWQxMTZiZjBmYWM4ZDdhYzg3ZWQ0&ua=&ver=4.2.1] 200 - AllApp/4.2.1 (iPhone; iOS 10.0.2; Scale/3.00) 0.004 91参数说明:className 官⽅⽂档上说了:This MUST be set toorg.apache.catalina.valves.AccessLogValve to use the default access log valve。
tomcat的localhost_access_log日志文件
tomcat的localhost_access_log⽇志⽂件⼀、服务器打印⽇志要关闭hibernate的⽇志,⾸先要把hibernate.show_sql设置为false;然后设置log4j.properties。
# Control logging for other open source packages.opensymphony.oscache=ERROR.sf.navigator=ERROR.sf.acegisecurity=WARN.sf.acegisecurity.intercept.event.LoggerListener=WARNmons=ERROR.apache.struts=WARN.displaytag=ERROR.springframework=WARN.ibatis.db=WARN.apache.velocity=WARN# Don't show debug logs for WebTest.canoo.webtest=WARN# All hibernate log output of "info" level or higher goes to stdout.# For more verbose logging, change the "info" to "debug" on the last line..hibernate.ps.PreparedStatementCache=WARN.hibernate=WARN# Changing the log level to DEBUG will result in Hibernate generated# SQL to be logged..hibernate.SQL=ERROR# Changing the log level to DEBUG will result in the PreparedStatement# bound variable values to be logged..hibernate.type=ERROR⼆、tomcat的localhost_access_log⽇志⽂件 tomcat的logs⽬录下除了有catalina.out⽇志⽂件外,还有个localhost_access_log.yyyy-MM-dd.txt的⽇志⽂件。
Tomcataccesslog配置
Tomcataccesslog配置在tomcat的access中打印出请求的情况可以帮助我们分析问题,通常⽐较关注的有访问IP、线程号、访问url、返回状态码、访问时间、持续时间。
在Spring boot中使⽤了内嵌的tomcat,可以通过server.tomcat.accesslog配置tomcat 的access⽇志,这⾥就以Spring boot 1.5.3为例。
server.tomcat.accesslog.buffered=true # Buffer output such that it is only flushed periodically.server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be relative to the tomcat base dir or absolute.server.tomcat.accesslog.enabled=false # Enable access log.server.tomcat.accesslog.file-date-format=.yyyy-MM-dd # Date format to place in log file name.server.tomcat.accesslog.pattern=common # Format pattern for access logs.server.tomcat.accesslog.prefix=access_log # Log file name prefix.server.tomcat.accesslog.rename-on-rotate=false # Defer inclusion of the date stamp in the file name until rotate time.server.tomcat.accesslog.request-attributes-enabled=false # Set request attributes for IP address, Hostname, protocol and port used for the request.server.tomcat.accesslog.rotate=true # Enable access log rotation.server.tomcat.accesslog.suffix=.log # Log file name suffix.⽐较常⽤的有(省略了前缀server.tomcat.accesslog.):enabled,取值true、false,需要accesslog时设置为truedirectory,指定access⽂件的路径pattern,定义⽇志的格式,后续详述rotate,指定是否启⽤⽇志轮转。
通过查看服务器各种日志
通过查看服务器各种日志1. 访问日志(Access Logs):2. 错误日志(Error Logs):错误日志记录了服务器上发生的各种错误信息,如404错误(页面未找到)、500错误(服务器内部错误)等。
通过查看错误日志,可以快速定位和解决服务器上的错误。
这对于网站管理员和开发人员来说是非常有帮助的,可以及时修复bug,提高网站的稳定性和可用性。
3. 安全日志(Security Logs):安全日志记录了关于服务器安全方面的信息,如登录失败记录、被拒绝的访问尝试等。
通过查看安全日志,可以及时发现潜在的安全威胁,并采取相应的安全措施来保护服务器。
这对于网络管理员和安全专家来说是非常重要的,可以确保服务器的安全性。
4. 应用程序日志(Application Logs):应用程序日志记录了应用程序在服务器上的运行情况,如出现异常、调试信息等。
通过查看应用程序日志,可以定位和解决应用程序中的问题。
这对于开发人员来说是非常有帮助的,可以帮助他们改进应用程序的质量和性能。
5. 系统日志(System Logs):系统日志记录了服务器操作系统的运行情况,如启动信息、关机信息、内核信息等。
通过查看系统日志,可以了解服务器的性能状况和资源利用情况,及时发现和解决系统故障。
这对于系统管理员来说是非常重要的,可以确保服务器的稳定运行。
总之,通过查看服务器各种日志,可以获得服务器的各种信息,有助于监控服务器的性能、诊断问题和进行故障排除。
不同类型的日志提供了不同的信息,可以帮助不同的用户解决不同的问题。
因此,合理利用服务器日志是服务器管理和维护的重要手段之一。
Tomcat日志设定
Tomcat日志配置Tomcat 日志信息分为两类:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息。
二是访问日志信息,它记录的访问的时间,IP ,访问的资料等相关信息。
一:Tomcat server.xml日志的设定Tomcat的访问日志是靠org.apache.catalina.valves.AccessLogValve来控制的,你可以修改$tomcat/conf/server.xml来启用它($tomcat是Tomcat安装的目录)。
AccessLogValve默认应该是注释掉的,简单的将其注释去掉,然后重启Tomcat就可以了。
以下是Tomcat默认的配置:在server.xml里的<host>标签下加上<Valve className=“org.apache.catalina.valves.AccessLogValve”directory=“logs” prefix=“localhost_access_log.” suffix=“.txt”pattern=“common” resolveHosts=“false”/>各个参数:Ps:具体参数详见Tomcat官网:/tomcat-6.0-doc/config/valve.html className 官方文档上说了This MUST be set to org.apache.catalina.valves.AccessLogValve to use the default access log valve. &<60; 想配置访问日志?这就必须得写成这样。
directory这个东西是日志文件放置的目录,在tomcat下面有个logs文件夹,那里面是专门放置日志文件的,当然你也可以修改,我就给改成了D:\Prefix这个是日志文件的名称前缀,我的日志名称为localhost_access_log.2007-09-22.txt,前面的前缀就是这个localhost_access_logSuffix 这就是后缀名啦,可以改成别的 .txt就是后缀名Pattern这个是最主要的参数了,具体的咱们下面讲,这个参数的内容比较丰富resolveHosts如果这个值是true的话,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址啦还有一些参数:Rotatable默认为true,默认的设置使得你的tomcat生成的文件命为prefix(前缀)+.+时间(一般是按天算)+.+suffix(后缀),参照我的日志名就知道了:localhost_access_log.2007-09-22.txt、使用这个需要谨慎,因为你将其设置为false的话,tomcat会忽略时间,不会新生成文件,最后导致你的文件超级大,这样生成的文件名就是:localhost_access_log.txtcondition这个参数不太实用,可以设置任何值,比如咱们设置成condition="tkq",那么只有当ServletRequest.getAttribute("tkq")为空的时候,才会被记录下来fileDateFormat最后的一个参数,很明白,这就是时间格式嘛,但是这个时间格式是针对日志文件起作用的,还记得咱们生成的日志文件全名么:localhost_access_log.2007-09-22.txt,这里面的2007-09-22就是这么来的,如果你想让tomcat每小时生成一个日志文件,也很简单,将这个值设置为:fileDateFormat="yyyy-MM-dd.HH",当然也可以按分钟生成什么的,自己改改吧pattern以下列出了一些基本的日志格式项:∙%a–远程主机的IP (Remote IP address)∙%A–本机IP (Local IP address)∙%b–发送字节数,不包含HTTP头,0字节则显示‘-’ (Bytes sent, excluding HTTP headers, or ‘-’ if no byteswere sent)∙%B–发送字节数,不包含HTTP头(Bytes sent, excluding HTTP headers)∙%h–远程主机名(Remote host name)∙%H–请求的具体协议,HTTP/1.0 或HTTP/1.1 (Request protocol)∙%l–远程用户名,始终为‘-’ (Remote logical username from identd (always returns ‘-’))∙%m–请求方式,GET, POST, PUT (Request method)∙%p–本机端口(Local port)∙%q–查询串(Query string (prepended with a ‘?’ if it exists, otherwise an empty string)∙%r– HTTP请求中的第一行(First line of the request)∙%s– HTTP状态码(HTTP status code of the response)∙%S–用户会话ID (User session ID)∙%t–访问日期和时间(Date and time, in Common Log Format format)∙%u–已经验证的远程用户(Remote user that was authenticated∙%U–请求的URL路径(Requested URL path)∙%v–本地服务器名(Local server name)∙%D–处理请求所耗费的毫秒数(Time taken to process the request, in millis)∙%T–处理请求所耗费的秒数(Time taken to process the request, in seconds)你可以用以上的任意组合来定制你的访问日志格式,也可以用下面两个别名common和combined 来指定常用的日志格式:∙common–%h %l %u %t "%r" %s %b∙combined -%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"另外你还可以将cookie, 客户端请求中带的HTTP头(incoming header), 会话(session)或是ServletRequest中的数据都写到Tomcat的访问日志中,你可以用下面的语法来引用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修改位置如下图具体的解释如下Access Log Valve用来创建日志文件,格式与标准的web server日志文件相同。
可以使用用日志分析工具对日志进行分析,跟踪页面点击次数、用户会话的活动等。
Access Log Valve 的很多配置和行为特性与File Logger相同,包括每晚午夜自动切换日志文件。
Access Log Valve可以和任何Catalina容器关联,记录该容器处理的所有请求。
例子如下:<Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="%{X-Forwarded-For-Pound}i%l%u%t"%r"%s%b%T"%{HTTP_X_UP_CALLING_LINE_ID}i""%{x-up-calling-line-id}i""%{User-Agent}i""resolveHosts="false"/>className实现的Java类名。
必须被设置成org.apache.catalina.valves.AccessLogValve。
directory 存放日志文件的目录,可以是相对路径或者绝对路径。
如果使用相对路径,是指相对于$CATALINA_HOME的路径。
如果不指定directory属性,缺省值是“logs”(相对于$CATALINA_HOME)pattern需要记录的请求/响应不同信息域的格式布局。
如果是“common”或者“combine”,说明选择标准格式。
下面会有关于配置这个属性的更多信息。
prefix 日志文件名的前缀。
如果没有指定,缺省值是“access_log.”。
如果不想使用前缀,使用长度为0的字符串。
resolveHosts 将远端主机的IP地址通过DNS查询转换成主机名,设为true。
如果为false,忽略DNS查询,报告远端的IP地址。
suffix 日志文件名的后缀。
如果没有指定,缺省值是“”。
如果不想使用后缀,使用长度为0的字符串。
rotatable缺省值为true,用来决定日志是否翻转的标志。
如果为false,日志文件永远不翻转,并且忽略fileDataFormat。
要谨慎使用。
condition打开条件日志。
如果设置了这个属性,只有在ServletRequest.getAttribute()是null的时候,才会为请求创建日志。
比如,如果condition设为junk,则只有在Servlet.getAttribute("junk")==null的时候,才会记录这个请求。
使用过滤器,可以很容易设置(或者取消设置)不同请求的属性。
fileDateFormat 允许在日志文件名称中使用定制的日期格式。
日志的格式也决定了日志文件翻转的频率。
如果想每个小时翻转一次,将这个值设为yyyy-MM-dd.HHpattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。
pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。
目前支持如下的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-处理请求的时间,以秒为单位运行结果常使用web服务器的朋友大都了解,一般的web server有两部分日志:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息二是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。
现在我来和大家介绍一下利用tomcat产生的访问日志数据,我们能做哪些有效的分析数据?首先是配置tomcat访问日志数据,默认情况下访问日志没有打开,配置的方式如下:编辑${catalina}/conf/server.xml文件.注:${catalina}是tomcat的安装目录把以下的注释(<!---->)去掉即可。
<!--<Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="common"resolveHosts="false"/>-->其中directory是产生的目录tomcat安装${catalina}作为当前目录pattern表示日志生产的格式,common是tomcat提供的一个标准设置格式。
其具体的表达式为%h%l%u%t"%r"%s%b但本人建议采用以下具体的配置,因为标准配置有一些重要的日志数据无法生。
%h%l%u%t"%r"%s%b%T具体的日志产生样式说明如下(从官方文档中摘录):*%a-Remote IP address*%A-Local IP address*%b-Bytes sent,excluding HTTP headers,or'-'if zero*%B-Bytes sent,excluding HTTP headers*%h-Remote host name(or IP address if resolveHosts is false)*%H-Request protocol*%l-Remote logical username from identd(always returns'-')*%m-Request method(GET,POST,etc.)*%p-Local port on which this request was received*%q-Query string(prepended with a'?'if it exists)*%r-First line of the request(method and request URI)*%s-HTTP status code of the response*%S-User session ID*%t-Date and time,in Common Log Format*%u-Remote user that was authenticated(if any),else'-'*%U-Requested URL path*%v-Local server name*%D-Time taken to process the request,in millis*%T-Time taken to process the request,in secondsThere is also support to write information from the cookie,incoming header,the Session or something else in the ServletRequest.It is modeled after the apache syntax:*%{xxx}i for incoming headers*%{xxx}c for a specific cookie*%{xxx}r xxx is an attribute in the ServletRequest*%{xxx}s xxx is an attribute in the HttpSession现在我们回头再来看一下下面这个配置%h%l%u%t"%r"%s%b%T生产的访问日志数据,我们可以做哪些事?先看一下,我们能得到的数据有:*%h访问的用户IP地址*%l访问逻辑用户名,通常返回'-'*%u访问验证用户名,通常返回'-'*%t访问日时*%r访问的方式(post或者是get),访问的资源和使用的http协议版本*%s访问返回的http状态*%b访问资源返回的流量*%T访问所使用的时间有了这些数据,我们可以根据时间段做以下的分析处理(图片使用jfreechart工具动态生成):*独立IP数统计*访问请求数统计*访问资料文件数统计*访问流量统计*访问处理响应时间统计*统计所有404错误页面*统计所有500错误的页面*统计访问最频繁页面*统计访问处理时间最久页面*统计并发访问频率最高的页面分析工具包括两大部分,一个是后台解释程序,每天执行一次对后台日志数据进行解析后保存到数据库中。
第二个是显示程序,从数据库中查询数据并生成相应的图表信息。