我試圖將我的PrintStream對象綁定到控制檯的輸出和錯誤流,以便我寫的任何內容都會寫入到我的日誌文件中。如何將PrintStream與System.out和err流聯繫起來
public static void tieOutputStreams(String fileName) {
try {
File output = new File(fileName);
FileWriter writer = new FileWriter(output);
writer.close();
outputStream = new TiedOutputStream(output);
}
catch (Exception e) {
e.printStackTrace();
}
System.setErr(outputStream);
System.setOut(outputStream);
}
一旦我完成了寫作,我可以重置它回到事情的方式。
public static void resetOutputStreams() {
outputStream.close();
System.setErr(System.err);
System.setOut(System.out);
}
TiedOutputStream類看起來是這樣的:
public class TiedOutputStream extends PrintStream {
public TiedOutputStream(File logFile) throws FileNotFoundException {
super(logFile);
}
@Override
public void print(Object obj) {
super.print(obj);
System.out.print(obj);
}
@Override
public PrintStream printf(String format, Object... args) {
super.printf(format, args);
System.out.printf(format, args);
return this;
}
@Override
public void println(Object args) {
super.println(args);
System.out.println(args);
}
}
而我的主要方法:
public static void main(String[] args) {
try {
TieOutputStreams.tieOutputStreams("./sample.log");
System.out.println("Output console");
System.err.println("Error console");
float num = 1.123456f;
System.out.printf("A float: %.6f", num);
} catch (Exception e) {
e.printStackTrace();
}
finally {
TieOutputStreams.resetOutputStreams();
}
}
我想上我的兩個日誌文件和系統控制檯(出打印這些語句/ 呃)。由於我不知道的原因,這是行不通的。我很欣賞所有的答案和評論。提前致謝!
我知道有Log4j。但我仍然想這樣做。
這與'FileOutputStream'有什麼關係? – EJP
謝謝,我已經更新了這個問題。 – Raam