1 |
package net.oni2.aeinstaller.backend; |
2 |
|
3 |
import java.io.ByteArrayOutputStream; |
4 |
import java.io.File; |
5 |
import java.io.FileWriter; |
6 |
import java.io.IOException; |
7 |
import java.io.OutputStream; |
8 |
import java.io.PrintStream; |
9 |
|
10 |
/** |
11 |
* @author Christian Illy |
12 |
*/ |
13 |
public class LogPrintStream extends OutputStream { |
14 |
private static LogPrintStream instance = new LogPrintStream(); |
15 |
|
16 |
private ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
17 |
private FileWriter fw = null; |
18 |
private PrintStream stdOut = null; |
19 |
|
20 |
private boolean logStdOut = true; |
21 |
|
22 |
private LogPrintStream() { |
23 |
stdOut = System.out; |
24 |
|
25 |
PrintStream ps = new PrintStream(this); |
26 |
System.setOut(ps); |
27 |
System.setErr(ps); |
28 |
} |
29 |
|
30 |
/** |
31 |
* @return Logger instance |
32 |
*/ |
33 |
public static LogPrintStream getInstance() { |
34 |
return instance; |
35 |
} |
36 |
|
37 |
/** |
38 |
* Set the file to log to |
39 |
* |
40 |
* @param logFile |
41 |
* Log file |
42 |
* @throws IOException |
43 |
* Should not happen?! |
44 |
*/ |
45 |
public void setFile(File logFile) throws IOException { |
46 |
if (fw != null) |
47 |
fw.close(); |
48 |
fw = new FileWriter(logFile); |
49 |
} |
50 |
|
51 |
@Override |
52 |
public void write(int b) throws IOException { |
53 |
baos.write(b); |
54 |
if (logStdOut) |
55 |
stdOut.write(b); |
56 |
if (fw != null) |
57 |
fw.write(b); |
58 |
} |
59 |
|
60 |
/** |
61 |
* @return Get the text that has been written to log up to now |
62 |
*/ |
63 |
public String getLog() { |
64 |
return baos.toString(); |
65 |
} |
66 |
|
67 |
@Override |
68 |
public void flush() throws IOException { |
69 |
stdOut.flush(); |
70 |
baos.flush(); |
71 |
if (fw != null) |
72 |
fw.flush(); |
73 |
} |
74 |
|
75 |
@Override |
76 |
public void close() throws IOException { |
77 |
if (fw != null) |
78 |
fw.close(); |
79 |
super.close(); |
80 |
} |
81 |
} |