? 目前的很多商業(yè)和非商業(yè)的服務(wù)器中間件都默認(rèn)集成了common-log甚至是log4j.因此當(dāng)我門把我們的應(yīng)用發(fā)布在上面的時候,都會遇到關(guān)于log方面的問題.
? 1.webshpere下面集成log4j.
? "WebSphere的類裝入器方式有兩種方式:PARENT_FIRST和PARENT_LAST。默認(rèn)值是PARENT_FIRST,這種方式在載入當(dāng)前classpath的類之前先載入其上一級classloader能夠裝入的類。這是標(biāo)準(zhǔn)的JVM classloader的默認(rèn)策略。如果采用PARENT_LAST,則過程正好相反,即先載入當(dāng)前classpath的類,再載入其上一級classloader能夠裝入的類,這樣可以用當(dāng)前classpath中更新的類覆蓋其上一級classloader的相同類。受類裝入器方式影響的classloader包括application classloader、WAR classloader以及共享類庫的classloader。"
?因為websphere在共享類庫的classloader中有一套common logging,但是確沒有合適配置文件.如果我們把配置正確的log4j.properties文件放在共享類庫下,我們會發(fā)現(xiàn)log4j可以運行.但還有另外一個很通用的方式--改變webshpere的類庫加載順序.我們讓他先加載我們web應(yīng)用所需的類庫.即我們把web應(yīng)用的加栽方式改為PARENT_LAST.
? 哎,盡管我小心的提防,今天還是中招了,在我的配置里,log4j的配置文件只能讀取一次,不能一個應(yīng)用一個配置文件.為了讓它加載自己的配置,可以自己寫(或者用spring的)servlet/listener去手動加載這個配置文件.
?2.jboss下面的集成log4j
? 大家可能都曾在為jboss下面配置log4j郁悶過.jboss比webshpere走的還遠.無論你的項目是否使用了log4j,jboss在自己啟動的時候就已經(jīng)運行他了.也就是說在jboss加載自己共享類庫的時候,已經(jīng)讀取了自己log4j.xml文件配置.這個文件在conf中可以找到.如果你需要為你的應(yīng)用單獨配置一個catagory,你需要直接在這里配置.
???在webloader裝載應(yīng)用的時候,如果應(yīng)用中有l(wèi)og4j的包,似乎總出現(xiàn)appender已被占用的問題.筆者把log4j的包連帶應(yīng)用中的log4j配置文件一并移去,世界清凈了.
關(guān)于為了讓應(yīng)用自帶的log4j配置文件生效,有人建議修改
?<attribute name="Java2ClassLoadingCompliance">false</attribute>
和
?<attribute name="UseJBossWebLoader">false</attribute>
這兩個屬性.
3.sunone下面集成log4j
??? 距離上次用SunOne服務(wù)器已經(jīng)好長時間了,似乎sunOne的log有些類似jboss,也是一個服務(wù)器的log集中管理.由于使用的不是很多,暫且在這里站個位子.
隨手貼點關(guān)于log的信息:
http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestionshttp://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html?