<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-26  評論-111  文章-19  trackbacks-0
            一般情況下,在記錄日志時,只能把通過API進(jìn)行記錄的信息寫入自定義的日志文件,其余的信息就無法被寫入了.

           解決的辦法就是重寫System.out和System.err,讓System.out,System.err的寫入轉(zhuǎn)向到你的日志文件,這樣只要在控制臺的所有的輸出信息都會被記錄到日志文件中.

          例如可以在系統(tǒng)進(jìn)行初始化時進(jìn)行這樣的操作:

          重寫System.out:
                  PrintStream printStreamOut = new PrintStream(outputStreamOut);
                  System.setOut(printStreamOut);
         
          重寫System.err
                  PrintStream printStreamErr = new PrintStream(outputStreamErr);
                  System.setErr(printStreamErr);


          這里的outputStreamOut,和outputStreamErr都是自定義的重定向的日志文件的OutputStream


          現(xiàn)在重定向輸出的問題解決了,可以又出現(xiàn)了一個新的問題: 在控制臺上看不到任何輸出信息,輸出的信息全部被定向到日志文件中.

           要解決這個問題還需要自己實(shí)現(xiàn)一個OutputStream,讓OutputStream能同時寫入多個輸出.

           首先繼承java.io.OutputStream,然后實(shí)現(xiàn)public abstract void write(int b) throws IOException; 并且覆寫java.io.OutputStream中的其他的方法,具體的實(shí)現(xiàn)方式按照自己的需求來做,這里就不做出具體的實(shí)現(xiàn)了.

           通過實(shí)現(xiàn)自己實(shí)現(xiàn)OutputStream之后,
          在
               PrintStream printStreamOut = new PrintStream(outputStreamOut);
               PrintStream printStreamErr = new PrintStream(outputStreamErr);
          中分別把outputStreamOut和outputStreamErr對象換成自己實(shí)現(xiàn)的OutputStream對象,這樣就可以實(shí)現(xiàn)在一個OutputStream對象中進(jìn)行多個輸出操作.

          按照以上的思路進(jìn)行的實(shí)現(xiàn),可以完全把控制臺的所有的輸出寫入到日志文件中,包括System.out.println這樣的輸出.

                   snoics
    posted on 2006-03-03 09:10 snoics 閱讀(3845) 評論(7)  編輯  收藏 所屬分類: 學(xué)習(xí) . 感悟

    評論:
    # re: 捕獲控制臺的所有輸出信息 2006-03-03 09:46 | 乾為天
    為什么不用log4j?  回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-03 09:51 | snoics
    用log4j也只能寫入通過log4j的api進(jìn)行記錄的日志
    如果在程序中有這樣一段Integer.parseInt("jfdklsjfdkf");
    而且沒有去catch這個錯誤,并且用log4j去寫入日志,則這段的出錯信息是不會被寫入日志的,只會在控制太輸出,除非程序是用容器執(zhí)行,而且是類似jboss這樣的,才會被記錄到j(luò)boss自己的系統(tǒng)日志里面  回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-03 10:14 | snoics
    偏題了吧......這里說的不是該用哪種日志的問題,而且這個思路和log4j并不沖突,甚至可以說是一種補(bǔ)充的方式,可以把log4j捕捉不到的輸出信息也都給記錄下來  回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-03 15:40 | lizongbo
    tomcat通過配置 context的 swallowOutput="true" 就可以將 system.out和err的輸出轉(zhuǎn)到servlet的logger中,不過還沒讀過tomcat相關(guān)的src,有空可以看看它是怎么做的:)


    http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/Context.html#setSwallowOutput(boolean)

      回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-05 00:43 | netpirate
    程序中的Exception/Error與Log可以分開處理,前者控制臺輸出,后者輸出到文件。
    :)  回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-05 00:44 | netpirate
    程序中的Exception/Error與Log可以分開處理,前者控制臺輸出,后者輸出到文件。
    :)  回復(fù)  更多評論
      
    # re: 捕獲控制臺的所有輸出信息 2006-03-05 15:43 | snoics
    你說的都是使用WEB容器的情況下,使用的是容器的支持功能,如果是普通的JAVA應(yīng)用程序,不需要使用容器的情況,這樣的說法就行不通了  回復(fù)  更多評論
      
    主站蜘蛛池模板: 久久久青草青青国产亚洲免观| 国产v亚洲v天堂无码网站| 理论片在线观看免费| 国产黄色一级毛片亚洲黄片大全| 国产猛男猛女超爽免费视频| 亚洲国产精品日韩在线观看| 免费一级毛片在级播放| 午夜免费福利片观看| 国产亚洲视频在线播放大全| 亚洲第一中文字幕| 在线免费观看国产视频| 日韩精品极品视频在线观看免费| 亚洲久热无码av中文字幕| 国产亚洲免费的视频看| 色吊丝永久在线观看最新免费| 免费无码又爽又刺激高潮软件| 亚洲人成色77777在线观看| 亚洲AV综合色一区二区三区| 国产成人精品123区免费视频| 久久免费国产视频| 九九九国产精品成人免费视频| 亚洲国产成人久久| 亚洲av中文无码乱人伦在线r▽| 国产精品免费视频一区| 亚洲免费观看网站| 日韩精品无码免费专区网站| 亚洲大尺度无码无码专线一区| 亚洲黄色一级毛片| 亚洲精品乱码久久久久久中文字幕 | 亚洲精品自偷自拍无码| 色噜噜综合亚洲av中文无码| 亚洲国产精品尤物YW在线观看| 成人五级毛片免费播放| 最近中文字幕免费完整| 青柠影视在线观看免费| 久久精品无码免费不卡| 国产AV无码专区亚洲AV麻豆丫 | 久久国产免费一区二区三区| 成人免费网站视频www| 亚洲成a人无码亚洲成av无码| 亚洲免费观看网站|