国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

理解類加載器:J2EE 環境下的 log4j

2019-11-18 11:47:15
字體:
來源:轉載
供稿:網友

  大綱
  Log4j是一個很流行的日志記錄工具。根據java項目不同的日志需求和調試需求。他可以提供非常靈活的控制。它可以對輸出信息進行分級控制。也可以在運行時改變輸出信息的表現格式。而這一切都不需要改變源程序。
  Log4j用三個對象來控制日志的記錄。Logger,appenders,和layouts。logger會以特定的layouts(樣式)將日志記錄到appenders中。在這個操作過程中經常需要指定具體的外部配置文件。(指定外部配置文件也是最好的一種方式)。這些配置信息會在你的應用開始時加載進來,也可能在運行的時候被改變。
  在使用log4j的時候將會用到以下這些步驟:
  1.寫配置文件,在文件中需要:
  • 指定root logger的級別并且和一個appender綁定
  • 指定appender的屬性
  • 為appender指定一個layout
  2.在你的代碼中,需要根據class或name得到一個logger.典型的一種做法是將logger
  與當前的類的進行關聯。
  3.用你從第二步得到的logger的任何一種方法(log.debug(),log.info(),log.warn
  (),log.error())進行寫日志。
  
  設置安裝
  在這本書的例子是運行在weblogic 7.0 sp2 demo上。我們之所以用weblogic代替開源的產品(如jboss)是因為weblogic為在項目組中配置log4j提出了更多的挑戰。它也是最流行的應用服務器。自從我發表的之前的文章。我收的絕大多數問題都是關于它的。但是這里決不是暗示推薦使用weblogic。這只是提供一個測試環境。說明在j2ee環境下如何配置log4j
  
  Weblogic的設置安裝
  Weblogic7.0sp2可以從BEA's trial page下載。選擇你需要的版本類型進行下載。注重你必須要在bea上面進行一些個人信息的注冊。而且下載的文件很巨大。大約有150M。當然你也有別的選擇。你可以選擇免費的測試CD
  假如你得到了安裝文件。安裝就很簡單了。你只需要按照安裝向導一步一步安裝就可以了。我們的測試環境選擇典型安裝。當安裝到最后,安裝向導會問你是否需要配置Domain.選擇yes然后就會運行Domain的配置向導。第一屏、選擇Domain的類型和名字。選擇WLSDomain作為Domain的類型,給它起個名字叫mydomain.第二屏、設置server的類型為單一server(standalone server).再下一屏選擇缺省路徑做為Domain的路徑,再點擊next為server進行配置。然后一路next就可以了。最后需要你為domain輸入治理員帳號和密碼。我一般就是以admin作為治理員帳號,passWord最為密碼(很原始的做法)。接下來選擇是否將service注冊成windows的services(在windows環境下安裝),一般選擇no。最后選擇yes在windows開始菜單上方置快捷方式。最后點擊create建立Domain.
  運行weblogic就很簡單了。從開始菜單Start->All Programs->BEA WebLogic Platform 7.0->User Projects->mydomain->Start Server這樣可以啟動server.不過更常用的方式是從dos命令行,進入BEA的HOME目錄。進入user_PRojects/mydomain后,運行startWebLogic.cmd.就可以了。啟動的時候會要求你輸入治理員帳號和密碼。最后你可以看到server開始啟動。當你看到Server start in running mode表示啟動成功。假如要關閉你只要關閉Dos窗口就可以了。
  假如你安裝運行成功。你可以在瀏覽器中輸入如下地址http://localhost:7001/console.你會進入webogic的治理界面。你可以對applications和server進行各種配置。當然你要輸入治理員帳號和密碼。就和啟動時輸入的一樣。進入后你可以看到各種治理任務的界面。你也可以執行相應的治理任務。
  log4j的安裝
  和前面提到的一樣。Log4j可以從log4j web site.下載。請按照前面的文章介紹進行下載和安裝log4j的二進制代碼。在這章最后我們會介紹log4j的配置。
  類加載器的概念有什么不一樣。
  雖然有關類加載器的討論在本文以外已經有很多了。但是我還是盡力解釋一下類加載器是如何影響應用服務器中log4j的配置的。
  類加載器。顧名思義,表示在java虛擬機中加載calsses.在我們的class執行和被訪問之前。它必須通過類加載器加載使之有效。給定一個class名字,類加載器會定位class并且將它加載到java虛擬機。但是類加載器本事就是class。這就帶來一個問題。是誰來加載這些類加載器呢。
  當你運行一個java程序。(例如在命令行內輸入java命令),它就會執行并且啟動一個本地的native java launcher(我叫他java 啟動者,估計不太準確注明一下)。這里本地的意思是指針對你的平臺和運行環境而言。這個本地的java啟動者包含一個類加載器,這個類加載器的名字叫做bootstrap 類加載器.(引導類加載器).這個引導類加載器.是本地的和你的環境有關。而且它不是用java寫成的。這個引導類加載器的主要功能是加載java的核心類。
  
 理解類加載器:J2EE 環境下的 log4j(圖一)

  
Figure 1; 類加載器 委托層次

  
  Java虛擬機缺省會執行其他兩個類加載器.引導類加載器會加載extension(擴展)類加載器和application(應用)類加載器到內存中。這些都是用java寫成的。和前面提到的一樣。引導類加載器會加載java的核心類(例如:java.util包下的類)。擴展類加載器會加載擴展的java核心類(例如:javax.包下的類,或者是在運行環境中類路徑ext目錄下的java類。)應用類加載器會加載你應用下的各種class文件。
  所有三種類加載器都遵循委托模式。當低一級的類加載器需要定位一個類。它會將這個任務委托給父一級類加載器.當你的應用需要一個非凡的類。應用類加載器會將這個任務委托給擴展類加載器.而擴展類加載器又會將這個任務委托個引導類加載器.。假如你請求的類是一個核心類。那么引導類加載器會將這個類加載,使你可以使用這個類。但是假如找不到這個類。這個請求就會返回到擴展類加載器.最后在返回到應用類加載器.這樣的做法就使每個類加載器會先讓它的父一級的類加載器搜索需要的類。只有當父一級的類加載器沒有找到。才會讓子一級的類加載器為它自己搜索所需的類。
  在應用服務器當中,每一個獨立部署的web應用和EJB都會取得屬于自己的類加載器(正常情況下,這也是weblogic的處理方式)。這種類加載器來源于應用類加載器.它們主要用來加載特定的ejb和web應用。(注重一點,當我們的web應用打包成ear文件――ejb和webapps的混合,這時候只會有一個類加載器,不會再分成ejb和webapp兩種)這種新的類加載器會加載所有webapp和ejb所需要的類包。當然首先這些類包不存在于java核心類中和擴展類中(ext)。它可以加載也可以卸載類包。但它有一種缺省類加載器所沒有的特性。這個特性就是可以對應用進行熱部署。
  當weblogic啟動的時候。它會用java提供的應用類加載器加載相應的類。并且構造相應的運行環境。然后它會啟動特定的類加載器.這種特定的類加載器來源于java的應用類加載器.java的應用類加載器會為特定的類加載器加載相應的classes.這種特定的類加載器對于其他的應用的類加載器是不可見。因此。一個特定應用所加載的classes.對于其他應用是不可見的。
  
理解類加載器:J2EE 環境下的 log4j(圖二)

  
Figure 2: 特定的應用 類加載器

  
  那么我們如何使一個單獨的類對所有的應用都起作用呢。只有使用上層的類加載器.可以把這個類方在weblogic中classpath里面。當weblogic啟動的時候。缺省的java 應用類加載器會自動把類加載到內存中去。所有的子應用都是可以訪問到這個類的。但是。這中方法的缺點也很明顯。首先你失去了在所有特定應用中對指定類進行熱部署的能力。第二、這些類發生任何變化意味著server必須從新啟動。因為沒有一種機制可以讓java應用類加載器從新加載這些類。所以當你采用這種方法的時候你要權衡一下得失。
  對你的j2ee應用來說,Log4j是一種擴展類庫。那么我們應該把這個類庫放到那里去呢。前面提到一種建議是。將它放到weblogic啟動時的classpath中。但是前面也講到了它的缺點。不太建議使用這種方法。但是在j2ee環境下配置log4j會因為ejb無法得知由webapp類加載器加載的classes而有一些自己的特點(ejb和webapp用的類加載器不相同)。除非你的包和應用使用的相同類加載器加載ejb和webapp.下面我為說明這一點舉個例子。
  我們會在我們安裝的weblogic中部署一個非常簡單的應用它包括jsp和ejb.這個ejb是個非常簡單的ejb。當它被調用的時候會返回”hello world”
  Example: Why Doesn't It Work?
  例子:“它為什么不工作。“
  讓我們用weblogic 的控制臺安裝.war文件和。Ejb的.jar(EJB .jar file)文件。當我們想要安裝ejb的.jar文件的時候。我們會發現org.apache.log4j.logger找不到的錯誤。
  Ejb的.jar文件無法從與它相對應的webapp的目錄下的web-inf目錄得到log4j的消息。因為ejb和webapp使用的是不的類加載器.甚至是我們將ejb和webapp打包到同一個ear文件中(.ear file)。我們還是得到錯誤信息。這是為什么?即使我們將ejb和webapp打包到ear文件中使用相同的類加載器。我們還沒有告訴我們的ejb去那里訪問log4j.jar文件。
  Example: Why It Will Work
  例子:為什么它工作了。
  這里有個升級后可以工作的ear文件(updated .ear file)讓我們看看都做了那些改動。
  • 我將log4j.jar文件從webapp的lib目錄下面一移到了外層目錄。與.war和ejb.jar文件平級。這
  樣使得.jar文件對ejb來講是可見的。
  • 我更改的Ejb.jar文件中的Manifest.mf,增加一個條目,使他包含了指向log4j.jar的classpath
  (Class-Path: log4j.jar)
  這些更改已經可以使我們將這個應用部署到weblogic上。當我們用控制臺部署的時候已經沒有出錯信息了。因為現在ejb可以訪問log4j。對于loa

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临西县| 临朐县| 微山县| 黄浦区| 奉化市| 高要市| 寿光市| 惠来县| 金昌市| 嫩江县| 大兴区| 平果县| 正定县| 和平县| 平顺县| 彭州市| 玉树县| 衢州市| 乐清市| 德令哈市| 锡林郭勒盟| 英山县| 乐业县| 文化| 开平市| 厦门市| 方正县| 黄龙县| 威海市| 卓尼县| 梁山县| 太康县| 桂平市| 大荔县| 共和县| 建昌县| 额尔古纳市| 海城市| 泾源县| 久治县| 怀化市|