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