Java, Only Java!

          統計

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評論排行榜

          Apusic AS的Web應用中調用Log4J的流程

          經常碰到項目中用Log4J,但是自己一直都沒有認真去研究過Log4J的運行流程,看了許多資料講得都是Log4J.properties怎么配置,但是Log4J啟動→調用→輸出的流程仍然不清楚,本文就準備對Log4J的詳細啟動過程進行介紹,使得大家可以更好的在Apusic中使用Log4J。

          ?

          1. 編寫一個Servlet程序,目標是初始化Log4J的相關配置,具體內容參考附件中的Log4jInit.java程序,附件下載地址:http://zhuyuanxiang.javaeye.com/topics/download/66d599d6-b21c-3933-a707-be2b08505519
          public class Log4jInit extends HttpServlet {

          ?public void init() {
          ??ServletContext context = getServletConfig().getServletContext();
          ??Hierarchy hierarchy = new Hierarchy(new RootCategory(Level.DEBUG));

          ??// 將hierarchy初始化后保存到context中,在Web應用的全局供其他Web代碼使用。
          ??context.setAttribute("hierarchy", hierarchy);

          ??String prefix = getServletContext().getRealPath("/");
          ??String file = getInitParameter("log4j-init-file");
          ??// if the log4j-init-file is not set, then no point in trying
          ??if (file != null) {???// 增加hierarchy配置的內容
          ???new PropertyConfigurator().doConfigure(prefix + file, hierarchy);
          ???Logger logger = hierarchy.getLogger(Log4jInit.class.getName());
          ???logger.info("Logging initialized for Hello.");
          ??}
          ?}

          關鍵就是對Hierachy的初始化,并且保存到context中,供其他Web應用中的Java代碼使用

          2. 配置web.xml文件,對Log4jInit在Web應用加載過程中初始化

          ?<servlet>
          ??<servlet-name>log4j-init</servlet-name>
          ??<servlet-class>wombat.Log4jInit</servlet-class>

          ??<init-param>
          ???<param-name>log4j-init-file</param-name>
          ???<param-value>WEB-INF/classes/log4j.properties</param-value>
          ??</init-param>
          ??<load-on-startup>1</load-on-startup>
          ?</servlet>

          3. 編寫HelloServlet.java,在代碼中使用Logger

          ?public void init() throws ServletException {
          ??ServletContext context = getServletConfig().getServletContext();
          ??// 從context中取出hierarchy供本Servlet的Logger使用
          ??Hierarchy hierarchy = (Hierarchy) context.getAttribute("hierarchy");

          ??if (hierarchy == null) {
          ???context.log("The Hello web-application is not properly intialized.");
          ??} else {
          ???logger = hierarchy.getLogger(HelloServlet.class.getName());

          ?? logger.info("HelloServlet initiation is OK!");
          ??}
          ?}

          ?

          因此,如果使用Log4J需要在代碼中初始化Log4J的相關配置并保存到上下文中,同時配置信息寫在web.xml中,并且正確提供log4j.properties文件,然后在代碼中調用了Logger就可以輸出日志信息了。

          本例子的/hello.log一般會輸出在應用所在盤的根目錄下,開發人員可以根據自己的需要調整Log4J.properties文件就可以改變了。

          posted on 2008-06-13 22:53 zYx.Tom 閱讀(2188) 評論(10)  編輯  收藏 所屬分類: 1.Java世界

          評論

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 00:18 Robin's Java World

          Apusic使用Log4J還這難?
          如果這難,表明Apusic做得可不好喲。
          看看Webshpere和WebLogic,使用Log4J就跟在Tomcat中一樣,沒有任何分別。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 10:14 朱遠翔-Apusic技術顧問

          @Robin's Java World
          可能我寫的東西帶來些誤解,我說的不是什么應用服務器有問題,而是介紹Log4J在應用服務器的Web應用中如何被調用的。現在介紹Log4J配置的文章多,而Log4J運行機制的文章少。
          許多朋友用的時候都知其然而不知其所以然,一旦應用Log4J的某個環節出現問題(例如:配置文件找不到),就不知道怎么處理了,我也是這樣茫然用Log4J很久后,被迫研究了一下運行機制,寫出來與大家一起分享。
          實際上大部分應用都不是單純在用Log4J,而是Java Commons-Logging(JCL)+Log4J,使用的方式與這篇文章還有不同,我想你說的在其他應用服務器中很好用,可能也就是這種應用方式。下面一篇文章我就會介紹JCL+Log4J在Apusic中的應用,你會發現在Apusic中Log4J同樣很好用。
          Apusic的日志機制采用了與Log4J不同的框架,是SUN JDK 1.4 Logging,并不是Apusic應用服務器本身有什么不足,不同框架的融合正是J2EE世界的特點,那么融合這兩種框架對許多朋友來說確實存在一定的難度,這兩篇文章的目的也就是想幫助大家。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 10:25 鬼狗

          我Orz了,作為國內apusic的最早用戶,作為apusic的義務免費測試人員,作為apusic的直接受害者,我今天又Orz了。

          ls的,貌似樓主的意思并非是說apusic不能正常使用log4j,而是要自己玩玩。我們使用log4j和在其他應用服務器上并沒有區別。

          樓主,你騙點擊也不用這樣么,這跟apusic有鬼關系,你這樣寫只會讓大家以為apusic很濫,雖然她確實很濫,但是作為顧問你要有職業道德么。



            回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 10:45 朱遠翔-Apusic技術顧問

          @鬼狗
          我不用騙點擊率,我開博就說了這個是我記錄自己工作內容的地方。
          其次,每個應用服務器肯定會有不同的,我只測試了Apusic的使用情況,嚴謹的說只能是Apusic上的Log4J如何用。
          任何產品都有不完美的地方,Oracle的數據庫就是最新的版本,我還遇到過CPU資源被嚴重消耗,最后通過打補丁來解決的問題,但是沒人會說Oracle數據庫不好。Apusic作為國內知名的應用服務器產品,也得到了大量客戶的認可。
          不過對于Apusic產品給您工作帶來的麻煩,我們愿意配合您給予解決。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 14:17 鬼狗

          如果apusic的技術人員有能力解決,誰還有意見,問題就是。。。。。
            回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 14:18 鬼狗

          ps一下,你們客服人員到現場連個服務單都不填的,管理那個濫。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-06-14 15:01 朱遠翔-Apusic技術顧問

          @鬼狗
          看樣子,真的把你郁悶到了,很抱歉。
          如果你那里有什么我可以幫上忙的,也可以給我留言。
          仍然感謝你對Apusic產品的支持。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-07-23 18:31 隔葉黃鶯

          其實在Webshpere下通過 commons-logging 來使用 log4j 也不容易,因為 commons-logger 的初始化優先取某個系統屬性,而 Websphere 啟動時恰好又設置了這一系統屬性,就會發現 log4j 輸不出日志來,被 Websphere 的日志實現截了下來,輪不到 log4j 的份。

          不知道這能不能算是 Websphere 做得很差勁。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2008-07-24 09:22 朱遠翔-Apusic技術顧問

          @隔葉黃鶯
          通過調整默認的Commons-Logging估計可以解決。
          這個問題技術上難度不大,還是考慮周到與否的問題。  回復  更多評論   

          # re: Apusic AS的Web應用中調用Log4J的流程 2009-11-17 23:33 XX001

          webshpere 的日志輸出是有些麻煩,要設定系統屬性.
          不過,這個并不代表webshpere 做得不好
          同樣.Apusic 可以不用設定系統屬性,就可以方便的輸出日志,
          也不代表,Apusic 就做得好
          一個產品的好不好,要看應用領域,用戶群體,還有開發者.
          如果三樣都差,肯定不會是什么好產品

            回復  更多評論   

          主站蜘蛛池模板: 台山市| 潞西市| 大埔区| 永德县| 垫江县| 巨鹿县| 定结县| 扎鲁特旗| 宁强县| 保定市| 吉水县| 灯塔市| 霍山县| 霍州市| 原平市| 屯留县| 张家川| 太白县| 南岸区| 郧西县| 安仁县| 伊春市| 襄垣县| 防城港市| 青岛市| 河间市| 云浮市| 两当县| 景德镇市| 白山市| 东兰县| 丰台区| 诏安县| 高要市| 西贡区| 临江市| 柳河县| 东山县| 晋江市| 勃利县| 交城县|