﻿<?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-CONAN ZONE-文章分类-Application Server</title><link>http://www.blogjava.net/conans/category/32882.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Mon, 31 Aug 2009 05:04:13 GMT</lastBuildDate><pubDate>Mon, 31 Aug 2009 05:04:13 GMT</pubDate><ttl>60</ttl><item><title>WAS 补丁攻略</title><link>http://www.blogjava.net/conans/articles/291616.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 18 Aug 2009 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/291616.html</guid><description><![CDATA[<h2>WAS 补丁攻略</h2>
有些日子没搞Websphere了，之前收到不少<span href="http://www.webspherechina.net/club/tag.php?name=IBM" onclick="tagshow(event)" class="t_tag">IBM</span>送的光盘，4-6的版本都有，IBM去年开始发行6.0，现在已经到了6.2的版本，其中的小版本比较复杂。<br />
<br />
一般对版本的定义是：x.x.x 三位，分别为主版本号，次要发布版本号，小或补丁发布版本号，而<span href="http://www.webspherechina.net/club/tag.php?name=WAS" onclick="tagshow(event)" class="t_tag">WAS</span>采用了四位制，第四位为 fix pack 即专指补丁版本号。如 6.0.1.2&nbsp;&nbsp;表示6.0.1 下的打了fixpack2补丁的版本。<br />
<br />
从6.0开始有2个补丁概念，一个是refresh pack，另一个是fix pack，fixpack 是指补丁包，而refresh pack则指小版本的更新，如was 6.0升级refresh pack2，则指由6.0升级到6.0.2。WAS的升级概念为：<br />
<br />
<span style="position: absolute; left: 215px; top: 790px;" id="attach_242" onmouseover="showMenu(this.id, 0, 1)"><img src="http://www.webspherechina.net/club/images/default/attachimg.gif" border="0"  alt="" /></span>
<img src="http://www.webspherechina.net/club/attachments/month_0804/20080402_742599217b404d5bc126CRP71n6pfrRO.gif" onload="attachimg(this, 'load')" onmouseover="attachimginfo(this, 'attach_242', 1);attachimg(this, 'mouseover')" onclick="zoom(this, 'attachments/month_0804/20080402_742599217b404d5bc126CRP71n6pfrRO.gif')" onmouseout="attachimginfo(this, 'attach_242', 0, event)" alt="" border="0" />
<div class="t_attach" id="attach_242_menu" style="position: absolute; display: none;">
<img src="http://www.webspherechina.net/club/images/attachicons/image.gif" class="absmiddle" alt="" border="0" /> <a href="http://www.webspherechina.net/club/attachment.php?aid=242&amp;k=2c0c892145d42f67a9920f83d6facef5&amp;t=1250566291&amp;nothumb=yes" target="_blank"><strong>001.gif</strong></a> (37.62 KB)<br />
<div class="t_smallfont">2008-4-2 14:43</div>
</div>
<br />
<br />
在5.0之前也有2个升级的概念，对应关系参考下图：<br />
<br />
<span style="position: absolute; display: none;" id="attach_243" onmouseover="showMenu(this.id, 0, 1)"><img src="http://www.webspherechina.net/club/images/default/attachimg.gif" border="0"  alt="" /></span>
<img src="http://www.webspherechina.net/club/attachments/month_0804/20080402_34406f0a506dc1d5c08bTmS1vr0JuzIW.jpg" onload="attachimg(this, 'load')" onmouseover="attachimginfo(this, 'attach_243', 1);attachimg(this, 'mouseover')" onclick="zoom(this, 'attachments/month_0804/20080402_34406f0a506dc1d5c08bTmS1vr0JuzIW.jpg')" onmouseout="attachimginfo(this, 'attach_243', 0, event)" alt="" border="0" />
<div class="t_attach" id="attach_243_menu" style="position: absolute; display: none;">
<img src="http://www.webspherechina.net/club/images/attachicons/image.gif" class="absmiddle" alt="" border="0" /> <a href="http://www.webspherechina.net/club/attachment.php?aid=243&amp;k=b12bef50e97468efff9450b3abade5da&amp;t=1250566291&amp;nothumb=yes" target="_blank"><strong>002.jpg</strong></a> (180.67 KB)<br />
<div class="t_smallfont">2008-4-2 14:43</div>
</div>
<br />
<br />
由于6.0 的第一个版本没有补丁，所以它也称为 6.0.0.1 版本。<br />
<br />
而要想从6.0升级到6.1，需要6.1的安装<span href="http://www.webspherechina.net/club/tag.php?name=%E6%96%87%E4%BB%B6" onclick="tagshow(event)" class="t_tag">文件</span>，所以打消了安装最新版本的想法。<br />
<br />
下面是安装6.0，然后升级到现在6.0最新版本的6.0.2.15的过程，首先安装App<span href="http://www.webspherechina.net/club/tag.php?name=Server" onclick="tagshow(event)" class="t_tag">Server</span>6.0，然后升级。由于6.0.2.15需要以6.0.2为基础才能进行升级，所以升级的整个过程为6.0 - 6.0.2 - 6.0.2.15。<br />
<br />
1) 6.0.0.1 -&gt; refresh pack 6.0.2,&nbsp;&nbsp;升级到 6.0.2<br />
<br />
<a href="http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg24009813" target="_blank"><font color="#0000ff">http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg24009813</font></a><br />
<br />
在download package内容下，选择和<span href="http://www.webspherechina.net/club/tag.php?name=%E6%9C%8D%E5%8A%A1%E5%99%A8" onclick="tagshow(event)" class="t_tag">服务器</span>平台、WAS版本相匹配的安装包，我所选的为32-bit x86 AMD/Intel AppServer 的ftp<span href="http://www.webspherechina.net/club/tag.php?name=%E4%B8%8B%E8%BD%BD" onclick="tagshow(event)" class="t_tag">下载</span>，6.0-WS-WAS-WinX32-RP0000002.zip，300多M，汗！<br />
<br />
解压后，将updateinstaller目录copy到WAS的安装目录下，如d:\ibm\<span href="http://www.webspherechina.net/club/tag.php?name=web" onclick="tagshow(event)" class="t_tag">web</span>sphere\appserver，然后运行update.exe，如果是非Windows<span href="http://www.webspherechina.net/club/tag.php?name=%E7%B3%BB%E7%BB%9F" onclick="tagshow(event)" class="t_tag">系统</span>，则参考<a href="http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg27008530#steps" target="_blank"><font color="#0000ff">http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg27008530#steps</font></a>，并且在下载补丁包时，注意选择对应的操作系统。<br />
<br />
重启后，登录WAS<span href="http://www.webspherechina.net/club/tag.php?name=%E6%8E%A7%E5%88%B6%E5%8F%B0" onclick="tagshow(event)" class="t_tag">控制台</span>，首页显示 IBM <span href="http://www.webspherechina.net/club/tag.php?name=WebSphere" onclick="tagshow(event)" class="t_tag">WebSphere</span> <span href="http://www.webspherechina.net/club/tag.php?name=Application" onclick="tagshow(event)" class="t_tag">Application</span> Server, 6.0.2.0，升级成功！<br />
<br />
2) 升级fix pack到6.0.2.15<br />
<br />
<a href="http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg24013495" target="_blank"><font color="#0000ff">http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg24013495</font></a><br />
又是一个260多M的大物件要下载，汗，之后按上述步骤升级。<br />
<br />
另外，在ibm的support网站下的download栏目，可以查看到最新的升级包，<a href="http://www-306.ibm.com/software/webservers/appserv/was/support/" target="_blank"><font color="#0000ff">http://www-306.ibm.com/software/webservers/appserv/was/support/</font></a>&nbsp;&nbsp;，如有必要则需要经常跟踪，并进行必要的评估和升级，以维持生产环境的可靠、稳定和安全。<br />
<br />
补充：<br />
<br />
说到WAS各个版本的补丁列表，太多了，粗略数了数6.0.0 下的补丁大概有250个左右，6.0.1下的大概有170个(不计referesh Pack），而6.0.2下的大概有400个左右（不计referesh pack），可参考 <a href="http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg27006899" target="_blank"><font color="#0000ff">http://www-1.ibm.com/support/docview.wss?rs=180&amp;uid=swg27006899</font></a> ，三言两语还真是说不完，我印象最深刻的是有不少bug fix是针对cookie处理不当而引起的。
<img src ="http://www.blogjava.net/conans/aggbug/291616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-08-18 11:33 <a href="http://www.blogjava.net/conans/articles/291616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 配置多数据源</title><link>http://www.blogjava.net/conans/articles/242103.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sun, 23 Nov 2008 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/242103.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/conans/articles/242103.html'>阅读全文</a><img src ="http://www.blogjava.net/conans/aggbug/242103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-11-23 14:23 <a href="http://www.blogjava.net/conans/articles/242103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Tomcat建立多个Web Server的方法 </title><link>http://www.blogjava.net/conans/articles/213460.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 08 Jul 2008 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/213460.html</guid><description><![CDATA[<p>**以下内容为网上收集后整理而成,如有错误或描述不准确的地方或是别的请多指教.</p>
<p>当你使用Tomcat作为Web Server的时候，是不是会想过这样的一个问题：如何利用Tomcat建立多个Web应用 呢？<br />
要实现这一点是很简单的,也有多种方法。(以下说明使用%tomcat_home%代表Tomcat安装目录)。</p>
<p>一.首先介绍一下Tomcat及server.xml.</p>
<p>Tomcat服务器是由一系列的可配置的组件构成,tomcat的组件可以在%tomcat_home%/conf/server.xml文件中进行配置,每个Tomcat组件和server.xml文件的一种配置元素对应.<br />
主要分为4类:<br />
1.顶层类元素:包括&lt;Server&gt;和&lt;Service&gt;,他们位于整个配置文件的顶层.<br />
&nbsp; &lt;Server&gt;元素代表整个Catalina Servlet 容器,由org.apache.catalin.Server接口定义.&lt;Server&gt;包含一个或多个&lt;Service&gt;元素.<br />
&nbsp; &lt;Service&gt;元素由org.apache.catalin.Service 接口定义.&lt;Service&gt;包含一个&lt;Engine&gt;元素,及一个或多个&lt;Connector&gt;元素.多个&lt;Connector&gt;元素共享一个&lt;Engine&gt;元素.<br />
2.连接器类元素<br />
&nbsp; 连接器类代表了介于客户与服务之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果传递给客户.<br />
&nbsp; &lt;Connector&gt;元素由org.apache.catalin.Connector 接口定义.代表了与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.<br />
3.容器类元素<br />
&nbsp; 容器类元素代表处理客户请求并生成响应的组件.包括&lt;Engine&gt; &lt;Host&gt;和&lt;Context&gt;.<br />
&nbsp; &lt;Engine&gt;元素由org.apache.catalin.Engine 接口定义.每个&lt;Service&gt;只能包含一个&lt;Engine&gt;元素,&lt;Engine&gt;元素处理在同一个&lt;Service&gt;中的所有&lt;Connector&gt;元素收到的客户请求.<br />
&nbsp; &lt;Host&gt;元素由org.apache.catalin.Host 接口定义.一个&lt;Engine&gt;元素中可以包含多个&lt;Host&gt;元素.每个&lt;Host&gt;元素定义了一个虚拟主机,她可以包含一个或多个Web 应用.<br />
&nbsp; &lt;Context&gt;元素由org.apache.catalin.Context 接口定义.代表了运行在虚拟主机上的一个Web 应用.一个&lt;Host&gt;元素可以包含多个&lt;Context&gt;元素<br />
4.嵌套类元素<br />
&nbsp; 嵌套类元素代表了可以加到容器中的组件,如&lt;Logger&gt; &lt;Realm&gt;和&lt;Value&gt;.<br />
&nbsp; <br />
关于server.xml的更多信息,可以参考Tomcat的文档:/webapps/tomcat-docs/config/index.html</p>
<p>样例:<br />
&lt;Server&gt;<br />
&nbsp;&lt;Service name="Catalina"&gt;<br />
&nbsp; &lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&gt;<br />
&nbsp; &lt;Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443"/&gt;<br />
&nbsp; &lt;Engine defaultHost="localhost" name="Catalina"&gt;<br />
&nbsp;&nbsp; &lt;Host appBase="webapps" name="localhost"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/&gt;<br />
&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/&gt;<br />
&nbsp;&nbsp; &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;<br />
&nbsp; &lt;/Engine&gt;<br />
&nbsp;&lt;/Service&gt;<br />
&lt;/Server&gt;</p>
<p>二.建立多个Web应用方法:</p>
<p>1.通过配置多个&lt;Context&gt;元素(这是最为普遍的方法)<br />
&nbsp; 在&lt;Host&gt;下配置多个&lt;Context&gt;元素<br />
&nbsp; &lt;Context path="app1" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp; &lt;Context path="app2" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp; 然后通过 主机名:端口/应用名 访问,如: http://localhost:8080/app1&nbsp; 或&nbsp; http://localhost:8080/app2</p>
<p>2.通过配置多个&lt;Host&gt;元素<br />
&nbsp; 在&lt;Engine&gt;下配置多个&lt;Host&gt;元素<br />
&nbsp;&nbsp;&nbsp; &lt;Host appBase="webapps" name="192.168.1.110"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;Context path="" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp;&nbsp;&lt;/Host&gt;<br />
&nbsp;&nbsp;&lt;Host appBase="webapps" name="192.168.1.114"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;Context path="" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp;&nbsp;&lt;/Host&gt;<br />
&nbsp;然后通过 主机名:端口 访问,如: http://192.168.1.110:8080&nbsp; 或&nbsp; http://192.168.1.114:8080<br />
&nbsp;需要注意的是这样需要机器连接到局域网上.<br />
&nbsp;<br />
3.通过配置多个&lt;Service&gt;元素(多端口 多应用)<br />
&nbsp; 在&lt;Server&gt;下配置多个&lt;Service&gt;元素<br />
&nbsp; &lt;Service name="Catalina"&gt;<br />
&nbsp; &lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8453" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&gt;<br />
&nbsp; &lt;Connector port="8019" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8453"/&gt;<br />
&nbsp; &lt;Engine defaultHost="localhost" name="Catalina"&gt;<br />
&nbsp;&nbsp; &lt;Host appBase="webapps" name="localhost"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="E:/workspace/app1/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp; &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;<br />
&nbsp; &lt;/Engine&gt;<br />
&nbsp; &lt;/Service&gt;<br />
&nbsp; &lt;Service name="Catalina2"&gt;<br />
&nbsp; &lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8090" redirectPort="8453" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"/&gt;<br />
&nbsp; &lt;Connector port="8019" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8453"/&gt;<br />
&nbsp; &lt;Engine defaultHost="localhost" name="Catalina"&gt;<br />
&nbsp;&nbsp; &lt;Host appBase="webapps" name="localhost"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="E:/workspace/app2/WebRoot" debug="0" reloadable="true"&gt;&lt;/Context&gt;<br />
&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp; &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;<br />
&nbsp; &lt;/Engine&gt;<br />
&nbsp; &lt;/Service&gt;<br />
&nbsp; <br />
&nbsp; 定义了两个Service分别是Catalina和Catalina2,侦听的端口分别是8080和8090<br />
&nbsp; 然后通过 主机名:端口 访问,如: http://localhost:8080&nbsp; 或&nbsp; http://localhost:8090<br />
</p>
<img src ="http://www.blogjava.net/conans/aggbug/213460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-08 23:00 <a href="http://www.blogjava.net/conans/articles/213460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 使用 Log4j 输出详细系统日志信息，快速诊断启动故障 </title><link>http://www.blogjava.net/conans/articles/213459.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 08 Jul 2008 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/213459.html</guid><description><![CDATA[Tomcat 启动时的系统日志默认是由 JdkLog14Logger 打印出来的，如<br />
<br />
<font color="#0000ff">2008-7-7 11:19:34 org.apache.catalina.core.StandardEngine start<br />
信息: Starting Servlet Engine: Apache Tomcat/5.0.28<br />
2008-7-7 11:19:34 org.apache.catalina.core.StandardHost start<br />
信息: XML validation disabled<br />
2008-7-7 11:19:34 org.apache.catalina.core.StandardHost getDeployer<br />
信息: Create Host deployer for direct deployment ( non-jmx )</font><br />
<br />
那我们能不能用 Log4J 来输出这种系统日志呢？我们知道像 Apache 那样的大部分开源框架、组件都是用通用日志组件 (commons-logging) 来输出日志的，因此如果把 commons-logging 和 log4j 搭配使用就能输出十分详尽的日志信息。<br />
<br />
尤其是碰到 Tomcat 几乎能令人抓狂的 Error filterStart ，如控制台下得到如下信息：<br />
<br />
<font color="#0000ff">2007-3-13 17:43:46 org.apache.catalina.core.StandardContext start<br />
严重: Error filterStart<br />
2007-3-13 17:43:46 org.apache.catalina.core.StandardContext start<br />
严重: Context startup failed due to previous errors</font><br />
<br />
而茫然不知所措时，免不了会胡乱猜测，更容易使你的注意力集中在所有的 filter 本身上，其实有些冤枉 filter 了。至少网上针对这个问题有许多不明确的解，有配置文件问题的，有缺类少包的问题等，不一定能和你的实际问题对上号。<br />
<br />
其实大可不必受如此之周折，解铃仍需寄铃人吗，由 Tomcat 给你落下的结，当然要 Tomcat 告诉你是怎么回事。很多人在自己的应用中会安放一个日志文件，却可能忽略掉 Tomcat 自身的日志文件，在 logs 目录下的 localhost_log.yyyy-MM-dd.txt 就事，记住只要碰到关于 Tomcat 本身启动的问题，查看其中当前的日志信息的话，问题就会坦荡荡荡显露在你的前面，基本也就能迎刃而解了。<br />
<br />
前面讲过，commons-logging+log4j 可以输出极详尽的信息，那现在就来说说如何配置。很多人开发过程中是通过 MyEclipse 来启动 Tomcat 的，所有这里包括两种方法，分别介绍如下：<br />
<br />
1. MyEclipse 启动 Tomcat 使用 Log4j 输出日志信息的配置<br />
<br />
在 MyEclipse 的 Tomcat 服务器配置中的 Prepend to classpath 或者 Append to classpath 中加入<br />
<br />
commons-logging-1.1.jar<br />
log4j-1.2.13.jar<br />
以及 log4j.properties 所在目录，如 D:\Tomcat\Tomcat 5.0.28-Test\bin<br />
<br />
如图：<br />
<div align="center"><img src="http://www.blogjava.net/images/blogjava_net/unmi/ScreenShots/TomcatWithLog4j.jpg" border="0"  alt="" /></div>
<br />
我是把 commons-logging-1.1.jar、log4j-1.2.13.jar 和 log4j.properties 都放在 %TOMCAT_HOME%\bin 目录下的，当然你也可以放在别处。
<p>&nbsp;</p>
完了之后，通过 MyEclipse 启动 Tomcat 时就能看到让你眼花花的日志滚屏，请根据实际需要在log4j.properties 中屏蔽你不想关注的内容。所以像这种日志信息最好是记录在文件中，屏幕的缓冲区是有限且耗内存的。真正需要的时候你就可以从这个日志文件里读懂 Tomcat 的启动全过程。<br />
<br />
如果你明白 commons-logging.properties 的功用，你也可以把这个文件放在与 log4j.properties 所在的目录下，可在其中指定其他 log 实现类，详见 commons-logging.properties 文件的内容。<br />
<br />
2. startup.bat 启动 Tomcat 使用 Log4j 输出日志信息的配置<br />
<br />
按前面推荐的做法，把 commons-logging-1.1.jar、log4j-1.2.13.jar 和 log4j.properties 都放在 %TOMCAT_HOME%\bin 目录下，然后修改 catalina.bat 文件，找到<br />
<br />
<font color="#0000ff">set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar</font><br />
<br />
行，在其后附上这两个包和 log4j.properties 所在目录到 classpath 上，修改后就是：<br />
<br />
<font color="#0000ff">set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_HOME%\bin\commons-logging-1.1.jar;%CATALINA_HOME%\bin\log4j-1.2.13.jar;%CATALINA_HOME%\bin<br />
</font><br />
保存，通过 startup.bat 启动就会用 log4j 来输出启动日志了，其他平台下的 Tomcat，请参照平台特性修改 catalina.sh 吧。<br />
<br />
同样，你也可以应用 commons-logging.properties 指定其他的 log 实现，因为 Log4j 是它的默认实现，所以可省去。<br />
<br />
用 Log4j 输出的启动日志形式如下：<br />
<br />
<font color="#0000ff">15:36:37,859 org.apache.catalina.startup.Embedded.initNaming(Embedded.java:922) - Setting naming prefix=org.apache.naming<br />
15:36:38,046 org.apache.catalina.startup.Catalina.createStartDigester(Catalina.java:350) - Digester for server.xml created 171<br />
15:36:38,218 org.apache.catalina.core.NamingContextListener.&lt;init&gt;(NamingContextListener.java:83) - new NamingContextListener<br />
</font><br />
许多你希望深入了解的内部细节都可以通过这样一份日志追踪到。<br />
<br />
附上这两个属性文件的：log4j.properties 和 commons-logging.properties。<br />
<br />
log4j.properties<br />
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>log4j.rootLogger=DEBUG,stdout,file </span>&nbsp;</span></li>
    <li class=""><span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">##&nbsp;direct&nbsp;log&nbsp;messages&nbsp;to&nbsp;stdout&nbsp;### </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>log4j.appender.stdout=org.apache.log4j.ConsoleAppender &nbsp;&nbsp;</span></li>
    <li class="alt"><span>log4j.appender.stdout.Target=System.</span><span class="keyword">out</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout &nbsp;&nbsp;</span></li>
    <li class="alt"><span>log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}&nbsp;%l&nbsp;-&nbsp;%m%n </span>&nbsp;</span></li>
    <li class=""><span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">##&nbsp;direct&nbsp;messages&nbsp;to&nbsp;file&nbsp;SystemOut.log&nbsp;### </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>log4j.appender.file=org.apache.log4j.FileAppender &nbsp;&nbsp;</span></li>
    <li class="alt"><span>log4j.appender.file.File=../logs/SystemOut.log &nbsp;&nbsp;</span></li>
    <li class=""><span>log4j.appender.file.Append=</span><span class="keyword">false</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>log4j.appender.file.layout=org.apache.log4j.PatternLayout &nbsp;&nbsp;</span></li>
    <li class=""><span>log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}&nbsp;%l&nbsp;-&nbsp;%m%n </span>&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span></li>
    <li class=""><span><span class="preprocessor">##&nbsp;block&nbsp;packages&nbsp;that&nbsp;you&nbsp;&nbsp;don't&nbsp;care&nbsp;about&nbsp;### </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>log4j.logger.org.apache.commons.digester=ERROR &nbsp;&nbsp;</span></li>
    <li class=""><span>log4j.logger.org.apache.commons.beanutils=ERROR &nbsp;&nbsp;</span></li>
    <li class="alt"><span>log4j.logger.org.apache.commons.modeler=ERROR&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea class="c#" style="display: none; width: 100%" name="code" rows="5">log4j.rootLogger=DEBUG,stdout,file
## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %l - %m%n
## direct messages to file SystemOut.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/SystemOut.log
log4j.appender.file.Append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %l - %m%n
## block packages that you  don't care about ###
log4j.logger.org.apache.commons.digester=ERROR
log4j.logger.org.apache.commons.beanutils=ERROR
log4j.logger.org.apache.commons.modeler=ERROR</textarea><br />
commons-logging.properties<br />
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger </span>&nbsp;</span></li>
    <li class=""><span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">#Please&nbsp;refer&nbsp;to&nbsp;the&nbsp;Log&nbsp;implementations&nbsp;in&nbsp;package&nbsp;org.apache.commons.logging.impl# </span>&nbsp;</span></li>
    <li class=""><span><span class="preprocessor">#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger </span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea class="c#" style="display: none; width: 100%" name="code" rows="3">org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
#Please refer to the Log implementations in package org.apache.commons.logging.impl#
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog</textarea><br />
<br />
<img src ="http://www.blogjava.net/conans/aggbug/213459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-08 23:00 <a href="http://www.blogjava.net/conans/articles/213459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>