﻿<?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-内蒙古java团队-随笔分类-申请加入java团队</title><link>http://www.blogjava.net/gdws/category/16478.html</link><description>j2se,j2ee开发组</description><language>zh-cn</language><lastBuildDate>Wed, 21 Nov 2007 21:39:03 GMT</lastBuildDate><pubDate>Wed, 21 Nov 2007 21:39:03 GMT</pubDate><ttl>60</ttl><item><title>log4j在项目中的配置。</title><link>http://www.blogjava.net/gdws/archive/2007/11/19/161619.html</link><dc:creator>帅子</dc:creator><author>帅子</author><pubDate>Mon, 19 Nov 2007 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/gdws/archive/2007/11/19/161619.html</guid><wfw:comment>http://www.blogjava.net/gdws/comments/161619.html</wfw:comment><comments>http://www.blogjava.net/gdws/archive/2007/11/19/161619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gdws/comments/commentRss/161619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gdws/services/trackbacks/161619.html</trackback:ping><description><![CDATA[<p><font size="3">log4j是一个很好的开源的日志项目，下面就我在实际中使用的一些情况作一个小结（我所写的是以spring为框架的运用，之所以要提到这点，是因为在spring中专门有处理log4j的地方，而我也用到了这些地方）。</font></p>
<p><font size="3">&nbsp;在使用的第一步你要明白你所发布的web项目所使用的服务器，因为不同的服务器对于使用log4j是有些不同的，我在实际使用中主要是用tomcat和jboss两类，对于tomcat,它本身是没有配置log4j的，所以使用起来和常规的一样；而在jboss中它是本身配置了log4j的，所以有时候我们在看项目代码时，其整个项目并没有log4j的配置文件，而在一些类中仍然定义了Logger,例如static Logger log = org.apache.log4j.Logger.getLogger(UserDaoImple.class);，这就表明开发者打算使用jboss默认的log4j的配置，我们可以在jboss下的对应的log目录下的server.log中看到日志，jboss本身的log4j的配置是将debug,info级的日志写在server.log中，而像error等级别比较高的日志打印到控制台上，而写到server.log中的日志比较多，并不方便查看。于是我们想到使用自己的log4j配置写到某个具体的文件中（注意文件要先建立，才能忘里面写东西，log4j自己不能建立文件），但这里因为jboss有它自己的log4j配置，所以如果我们配置的log4j包含Console的Appender时，就会出错，错误类似于</font></p>
<p><font size="3"><font color="#ff0000">ERROR: invalid console appender config detected, console stream is looping.</font><br />
解决方法一是不用Console的Appender,或者改jboss的配置文件，在jboss-service.xml文件里,把<br />
&lt;mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute name="ConfigurationURL"&gt;resource:log4j.xml&lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&lt;attribute name="CatchSystemOut"&gt;false&lt;/attribute&gt;</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute name="Log4jQuietMode"&gt;true&lt;/attribute&gt;<br />
&lt;/mbean&gt;。</font></p>
<p><font size="3">我建议不用Console的Appender，当然这是对jboss3.2.x是这样，对于jboss4.0.x如果我们要用自己的log4j配置照上述改还是会有问题，会有类似于</font><font color="#ff0000"><font size="3">log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable</font><font color="#000000" size="3">的异常，解决方法是把/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下两个熟悉改成true<br />
&lt;attribute name="Java2ClassLoadingCompliance"&gt;true&lt;/attribute&gt; <br />
&lt;attribute name="UseJBossWebLoader"&gt;true&lt;/attribute&gt; </font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3">以上就是使用jboss服务器可能出现的问题，解决了这些再来使用log4j就比较简单了。</font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3">下面说说对于采用了spring框架的项目如何使用log4j,在spring中使用log4j，有些方便的地方，</font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3">1. 动态的改变记录级别和策略，即修改log4j.properties,不需要重启Web应用，这需要在web.xml中设置一下。<br />
2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。 <br />
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ，而不是Class-Path。</font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3">首先我们在web.xml中需要设定一下</font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3">&lt;context-param&gt; <br />
&lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt; <br />
&lt;param-value&gt;WEB-INF/log4j.properties&lt;/param-value&gt; <br />
&lt;/context-param&gt; <br />
<br />
&lt;context-param&gt; <br />
&lt;param-name&gt;log4jRefreshInterval&lt;/param-name&gt; <br />
&lt;param-value&gt;60000&lt;/param-value&gt; <br />
&lt;/context-param&gt; <br />
<br />
&lt;listener&gt; <br />
&lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener&lt;/listener-class&gt; <br />
&lt;/listener&gt;&nbsp;<br />
其中第二部分就是能够动态修改log4j.properties的关键，容器会每60秒扫描log4j的配置文件&nbsp;。</font></font><font color="#ff0000"><font color="#000000" size="3">对于log4j的配置文件如何写，这就不多说了，大家可以去google，有一点就是我们如果用RollingFileAppender或者FileAppender时，可以通过${webapp.root}来定位到服务器的发布的该项目下，这是spring把web目录的路径压入到了webapp.root的系统变量。然后，在log4j.properties 里就可以这样定义logfile位置 <br />
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log <br />
如果有多个web应用，怕webapp.root变量重复，可以在context-param里定义webAppRootKey。</font></font></p>
<p><font color="#ff0000"><font color="#000000" size="3"><font size="3">当我们定义完log4j.properties后，剩下的就是在需要记录的class中new 出Logger了<br />
<br />
</font></font></font></p>
<br />
<img src ="http://www.blogjava.net/gdws/aggbug/161619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gdws/" target="_blank">帅子</a> 2007-11-19 14:55 <a href="http://www.blogjava.net/gdws/archive/2007/11/19/161619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>申请加入java团队</title><link>http://www.blogjava.net/gdws/archive/2006/10/20/76323.html</link><dc:creator>帅子</dc:creator><author>帅子</author><pubDate>Fri, 20 Oct 2006 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/gdws/archive/2006/10/20/76323.html</guid><wfw:comment>http://www.blogjava.net/gdws/comments/76323.html</wfw:comment><comments>http://www.blogjava.net/gdws/archive/2006/10/20/76323.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/gdws/comments/commentRss/76323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gdws/services/trackbacks/76323.html</trackback:ping><description><![CDATA[有意加入团队的朋友请将基本个人信息和在blogjava的用户名在回复中说明<img src ="http://www.blogjava.net/gdws/aggbug/76323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gdws/" target="_blank">帅子</a> 2006-10-20 10:10 <a href="http://www.blogjava.net/gdws/archive/2006/10/20/76323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>