隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827222
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          log4j是一個很好的開源的日志項目,下面就我在實際中使用的一些情況作一個小結(jié)(我所寫的是以spring為框架的運用,之所以要提到這點,是因為在spring中專門有處理log4j的地方,而我也用到了這些地方)。

           在使用的第一步你要明白你所發(fā)布的web項目所使用的服務(wù)器,因為不同的服務(wù)器對于使用log4j是有些不同的,我在實際使用中主要是用tomcat和jboss兩類,對于tomcat,它本身是沒有配置log4j的,所以使用起來和常規(guī)的一樣;而在jboss中它是本身配置了log4j的,所以有時候我們在看項目代碼時,其整個項目并沒有l(wèi)og4j的配置文件,而在一些類中仍然定義了Logger,例如static Logger log = org.apache.log4j.Logger.getLogger(UserDaoImple.class);,這就表明開發(fā)者打算使用jboss默認的log4j的配置,我們可以在jboss下的對應(yīng)的log目錄下的server.log中看到日志,jboss本身的log4j的配置是將debug,info級的日志寫在server.log中,而像error等級別比較高的日志打印到控制臺上,而寫到server.log中的日志比較多,并不方便查看。于是我們想到使用自己的log4j配置寫到某個具體的文件中(注意文件要先建立,才能忘里面寫東西,log4j自己不能建立文件),但這里因為jboss有它自己的log4j配置,所以如果我們配置的log4j包含Console的Appender時,就會出錯,錯誤類似于

          ERROR: invalid console appender config detected, console stream is looping.
          解決方法一是不用Console的Appender,或者改jboss的配置文件,在jboss-service.xml文件里,把
          <mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging">
                  <attribute name="ConfigurationURL">resource:log4j.xml</attribute>
                  <attribute name="CatchSystemOut">false</attribute>
                  <attribute name="Log4jQuietMode">true</attribute>
          </mbean>。

          我建議不用Console的Appender,當然這是對jboss3.2.x是這樣,對于jboss4.0.x如果我們要用自己的log4j配置照上述改還是會有問題,會有類似于log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable的異常,解決方法是把/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下兩個熟悉改成true
          <attribute name="Java2ClassLoadingCompliance">true</attribute>
          <attribute name="UseJBossWebLoader">true</attribute>

          以上就是使用jboss服務(wù)器可能出現(xiàn)的問題,解決了這些再來使用log4j就比較簡單了。

          下面說說對于采用了spring框架的項目如何使用log4j,在spring中使用log4j,有些方便的地方,

          1. 動態(tài)的改變記錄級別和策略,即修改log4j.properties,不需要重啟Web應(yīng)用,這需要在web.xml中設(shè)置一下。
          2. 把log文件定在 /WEB-INF/logs/ 而不需要寫絕對路徑。
          3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。

          首先我們在web.xml中需要設(shè)定一下

          <context-param>
          <param-name>log4jConfigLocation</param-name>
          <param-value>WEB-INF/log4j.properties</param-value>
          </context-param>

          <context-param>
          <param-name>log4jRefreshInterval</param-name>
          <param-value>60000</param-value>
          </context-param>

          <listener>
          <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
          </listener> 
          其中第二部分就是能夠動態(tài)修改log4j.properties的關(guān)鍵,容器會每60秒掃描log4j的配置文件 。
          對于log4j的配置文件如何寫,這就不多說了,大家可以去google,有一點就是我們?nèi)绻肦ollingFileAppender或者FileAppender時,可以通過${webapp.root}來定位到服務(wù)器的發(fā)布的該項目下,這是spring把web目錄的路徑壓入到了webapp.root的系統(tǒng)變量。然后,在log4j.properties 里就可以這樣定義logfile位置
          log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
          如果有多個web應(yīng)用,怕webapp.root變量重復(fù),可以在context-param里定義webAppRootKey。

          當我們定義完log4j.properties后,剩下的就是在需要記錄的class中new 出Logger了



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1067141



          posted on 2008-01-16 10:30 Ke 閱讀(5275) 評論(1)  編輯  收藏 所屬分類: exception 、jboss

          FeedBack:
          # re: log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable的異常 2012-03-22 10:21 sss
          很不錯。看了你的解決問題。  回復(fù)  更多評論
            
          主站蜘蛛池模板: 伊春市| 永州市| 临漳县| 芷江| 托里县| 醴陵市| 乌苏市| 新乡市| 察雅县| 平罗县| 甘南县| 临颍县| 苍山县| 胶南市| 桐庐县| 巴林右旗| 饶河县| 临潭县| 海丰县| 林甸县| 鄯善县| 卢氏县| 滨海县| 民丰县| 长春市| 梁河县| 泽州县| 中山市| 藁城市| 兴宁市| 商水县| 都匀市| 和平区| 河间市| 许昌市| 龙川县| 唐河县| 博罗县| 桐城市| 洞头县| 南京市|