﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Paul之Coder日记-随笔分类-WEB容器</title><link>http://www.blogjava.net/llxiong/category/8442.html</link><description>收藏。</description><language>zh-cn</language><lastBuildDate>Fri, 12 Feb 2010 00:17:00 GMT</lastBuildDate><pubDate>Fri, 12 Feb 2010 00:17:00 GMT</pubDate><ttl>60</ttl><item><title>Tomcat 内存</title><link>http://www.blogjava.net/llxiong/archive/2008/07/30/218736.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Wed, 30 Jul 2008 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/llxiong/archive/2008/07/30/218736.html</guid><wfw:comment>http://www.blogjava.net/llxiong/comments/218736.html</wfw:comment><comments>http://www.blogjava.net/llxiong/archive/2008/07/30/218736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/llxiong/comments/commentRss/218736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llxiong/services/trackbacks/218736.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/llxiong/archive/2008/07/30/218736.html'>阅读全文</a><img src ="http://www.blogjava.net/llxiong/aggbug/218736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llxiong/" target="_blank">xnabx</a> 2008-07-30 15:18 <a href="http://www.blogjava.net/llxiong/archive/2008/07/30/218736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)设计一个Tomcat访问日志分析工具 </title><link>http://www.blogjava.net/llxiong/archive/2008/04/15/193057.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Tue, 15 Apr 2008 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/llxiong/archive/2008/04/15/193057.html</guid><wfw:comment>http://www.blogjava.net/llxiong/comments/193057.html</wfw:comment><comments>http://www.blogjava.net/llxiong/archive/2008/04/15/193057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/llxiong/comments/commentRss/193057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/llxiong/services/trackbacks/193057.html</trackback:ping><description><![CDATA[<div class="postTitle">出处：http://www.blogjava.net/xmatthew/archive/2008/04/14/192450.html<a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/xmatthew/archive/2008/04/14/192450.html"><br />
(转)设计一个Tomcat访问日志分析工具</a> </div>
常使用web服务器的朋友大都了解，一般的web server有两部分日志：<br />
&nbsp;&nbsp;&nbsp; 一是运行中的日志，它主要记录运行的一些信息，尤其是一些异常错误日志信息<br />
&nbsp;&nbsp;&nbsp; 二是访问日志信息，它记录的访问的时间，IP，访问的资料等相关信息。<br />
&nbsp;&nbsp;&nbsp; <br />
现在我来和大家介绍一下利用tomcat产生的访问日志数据，我们能做哪些有效的分析数据？<br />
<br />
首先是配置tomcat访问日志数据，默认情况下访问日志没有打开，配置的方式如下：<br />
&nbsp;&nbsp;&nbsp; 编辑 ${catalina}/conf/server.xml文件.注:${catalina}是tomcat的安装目录<br />
&nbsp;&nbsp;&nbsp; 把以下的注释(&lt;!-- --&gt;)去掉即可。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_access_log." suffix=".txt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pattern="common" resolveHosts="false"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp; 其中 directory是产生的目录 tomcat安装${catalina}作为当前目录<br />
&nbsp;&nbsp;&nbsp; pattern表示日志生产的格式，common是tomcat提供的一个标准设置格式。其具体的表达式为 %h %l %u %t "%r" %s %b<br />
&nbsp;&nbsp;&nbsp; 但本人建议采用以下具体的配置，因为标准配置有一些重要的日志数据无法生。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %h %l %u %t "%r" %s %b %T&nbsp; <br />
具体的日志产生样式说明如下(从官方文档中摘录)：<br />
&nbsp;&nbsp;&nbsp; * %a - Remote IP address<br />
&nbsp;&nbsp;&nbsp; * %A - Local IP address<br />
&nbsp;&nbsp;&nbsp; * %b - Bytes sent, excluding HTTP headers, or '-' if zero<br />
&nbsp;&nbsp;&nbsp; * %B - Bytes sent, excluding HTTP headers<br />
&nbsp;&nbsp;&nbsp; * %h - Remote host name (or IP address if resolveHosts is false)<br />
&nbsp;&nbsp;&nbsp; * %H - Request protocol<br />
&nbsp;&nbsp;&nbsp; * %l - Remote logical username from identd (always returns '-')<br />
&nbsp;&nbsp;&nbsp; * %m - Request method (GET, POST, etc.)<br />
&nbsp;&nbsp;&nbsp; * %p - Local port on which this request was received<br />
&nbsp;&nbsp;&nbsp; * %q - Query string (prepended with a '?' if it exists)<br />
&nbsp;&nbsp;&nbsp; * %r - First line of the request (method and request URI)<br />
&nbsp;&nbsp;&nbsp; * %s - HTTP status code of the response<br />
&nbsp;&nbsp;&nbsp; * %S - User session ID<br />
&nbsp;&nbsp;&nbsp; * %t - Date and time, in Common Log Format<br />
&nbsp;&nbsp;&nbsp; * %u - Remote user that was authenticated (if any), else '-'<br />
&nbsp;&nbsp;&nbsp; * %U - Requested URL path<br />
&nbsp;&nbsp;&nbsp; * %v - Local server name<br />
&nbsp;&nbsp;&nbsp; * %D - Time taken to process the request, in millis<br />
&nbsp;&nbsp;&nbsp; * %T - Time taken to process the request, in seconds<br />
<br />
There 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:<br />
<br />
&nbsp;&nbsp;&nbsp; * %{xxx}i for incoming headers<br />
&nbsp;&nbsp;&nbsp; * %{xxx}c for a specific cookie<br />
&nbsp;&nbsp;&nbsp; * %{xxx}r xxx is an attribute in the ServletRequest<br />
&nbsp;&nbsp;&nbsp; * %{xxx}s xxx is an attribute in the HttpSession<br />
<br />
<br />
现在我们回头再来看一下下面这个配置 %h %l %u %t "%r" %s %b %T 生产的访问日志数据，我们可以做哪些事？<br />
先看一下，我们能得到的数据有:<br />
&nbsp;&nbsp;&nbsp; * %h 访问的用户IP地址<br />
&nbsp;&nbsp;&nbsp; * %l 访问逻辑用户名，通常返回'-'<br />
&nbsp;&nbsp;&nbsp; * %u 访问验证用户名，通常返回'-'<br />
&nbsp;&nbsp;&nbsp; * %t 访问日时<br />
&nbsp;&nbsp;&nbsp; * %r 访问的方式(post或者是get)，访问的资源和使用的http协议版本<br />
&nbsp;&nbsp;&nbsp; * %s 访问返回的http状态<br />
&nbsp;&nbsp;&nbsp; * %b 访问资源返回的流量<br />
&nbsp;&nbsp;&nbsp; * %T 访问所使用的时间<br />
&nbsp;&nbsp;&nbsp; <br />
有了这些数据，我们可以根据时间段做以下的分析处理(图片使用jfreechart工具动态生成)：<br />
&nbsp; * 独立IP数统计<br />
&nbsp; * 访问请求数统计<br />
&nbsp; * 访问资料文件数统计<br />
&nbsp; * 访问流量统计<br />
&nbsp; * 访问处理响应时间统计<br />
&nbsp; * 统计所有404错误页面<br />
&nbsp; * 统计所有500错误的页面<br />
&nbsp; * 统计访问最频繁页面<br />
&nbsp; * 统计访问处理时间最久页面<br />
&nbsp; * 统计并发访问频率最高的页面<br />
<br />
<img height="69" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/overview.JPG" width="754" border="0" /><br />
<br />
<img height="386" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/syncUsers.JPG" width="762" border="0" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/visits.JPG" border="0" /><br />
<br />
<img height="381" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/syncvisits.JPG" width="754" border="0" /><br />
<br />
<img height="381" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/outbytes.JPG" width="754" border="0" /><br />
<br />
<img height="380" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/syncoutbytes.JPG" width="754" border="0" /><br />
<br />
<img height="382" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/protocal.JPG" width="754" border="0" /><br />
<br />
<br />
<img height="383" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/httpstatusresults.JPG" width="754" border="0" /><br />
<br />
<img height="382" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/browsers.JPG" width="754" border="0" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/topoutbytes.JPG" border="0" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/topvisits.JPG" border="0" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/topusers.JPG" border="0" /><br />
<img height="230" alt="" src="http://www.blogjava.net/images/blogjava_net/xmatthew/spy2log/timeselect.JPG" width="213" border="0" /><br />
<br />
分析工具包括两大部分，一个是后台解释程序，每天执行一次对后台日志数据进行解析后保存到数据库中。<br />
第二个是显示程序，从数据库中查询数据并生成相应的图表信息。<br />
<img src ="http://www.blogjava.net/llxiong/aggbug/193057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/llxiong/" target="_blank">xnabx</a> 2008-04-15 12:06 <a href="http://www.blogjava.net/llxiong/archive/2008/04/15/193057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>