00001 package ikayaki.util; 00002 00003 import java.io.OutputStream; 00004 import java.io.PrintStream; 00005 import java.text.DateFormat; 00006 import java.text.SimpleDateFormat; 00007 import java.util.Date; 00008 00015 public class LoggerPrintStream extends PrintStream { 00016 00017 private DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); 00018 00019 private boolean lineStart = true; 00020 00021 private PrintStream screen; 00022 00028 public LoggerPrintStream(OutputStream out) { 00029 this(out, null, null); 00030 } 00031 00038 public LoggerPrintStream(OutputStream out, PrintStream screen) { 00039 this(out, screen, null); 00040 } 00041 00050 public LoggerPrintStream(OutputStream out, PrintStream screen, String message) { 00051 super(out); 00052 this.screen = screen; 00053 if (message != null) { 00054 if (screen != null) { 00055 screen.print(message); 00056 screen.println(); 00057 } 00058 super.print(message); 00059 super.println(); 00060 } 00061 } 00062 00063 private void timestamp() { 00064 if (lineStart) { 00065 String timestamp = dateFormat.format(new Date()) + " -- "; 00066 if (screen != null) { 00067 screen.print(timestamp); 00068 } 00069 super.print(timestamp); 00070 } 00071 lineStart = false; 00072 } 00073 00074 @Override public void print(boolean b) { 00075 timestamp(); 00076 if (screen != null) { 00077 screen.print(b); 00078 } 00079 super.print(b); 00080 } 00081 00082 @Override public void print(char c) { 00083 timestamp(); 00084 if (screen != null) { 00085 screen.print(c); 00086 } 00087 super.print(c); 00088 } 00089 00090 @Override public void print(int i) { 00091 timestamp(); 00092 if (screen != null) { 00093 screen.print(i); 00094 } 00095 super.print(i); 00096 } 00097 00098 @Override public void print(long l) { 00099 timestamp(); 00100 if (screen != null) { 00101 screen.print(l); 00102 } 00103 super.print(l); 00104 } 00105 00106 @Override public void print(float f) { 00107 timestamp(); 00108 if (screen != null) { 00109 screen.print(f); 00110 } 00111 super.print(f); 00112 } 00113 00114 @Override public void print(double d) { 00115 timestamp(); 00116 if (screen != null) { 00117 screen.print(d); 00118 } 00119 super.print(d); 00120 } 00121 00122 @Override public void print(char s[]) { 00123 timestamp(); 00124 if (screen != null) { 00125 screen.print(s); 00126 } 00127 super.print(s); 00128 } 00129 00130 @Override public void print(String s) { 00131 timestamp(); 00132 if (screen != null) { 00133 screen.print(s); 00134 } 00135 super.print(s); 00136 } 00137 00138 @Override public void print(Object obj) { 00139 timestamp(); 00140 if (screen != null) { 00141 screen.print(obj); 00142 } 00143 super.print(obj); 00144 } 00145 00146 @Override public void println() { 00147 if (screen != null) { 00148 screen.println(); 00149 } 00150 super.println(); 00151 lineStart = true; 00152 } 00153 00154 @Override public void println(boolean x) { 00155 this.println(x); 00156 this.println(); 00157 } 00158 00159 @Override public void println(char x) { 00160 this.println(x); 00161 this.println(); 00162 } 00163 00164 @Override public void println(int x) { 00165 this.println(x); 00166 this.println(); 00167 } 00168 00169 @Override public void println(long x) { 00170 this.println(x); 00171 this.println(); 00172 } 00173 00174 @Override public void println(float x) { 00175 this.println(x); 00176 this.println(); 00177 } 00178 00179 @Override public void println(double x) { 00180 this.println(x); 00181 this.println(); 00182 } 00183 00184 @Override public void println(char x[]) { 00185 this.println(x); 00186 this.println(); 00187 } 00188 00189 @Override public void println(String x) { 00190 this.print(x); 00191 this.println(); 00192 } 00193 00194 @Override public void println(Object x) { 00195 this.print(x); 00196 this.println(); 00197 } 00198 }