一般情況下,在記錄日志時,只能把通過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í) . 感悟