1 52 53 package com.go.trove.log; 54 55 import java.io.*; 56 import java.text.*; 57 import java.util.TimeZone ; 58 import com.go.trove.util.FastDateFormat; 59 60 83 public class LogScribe implements LogListener { 84 private PrintWriter mWriter; 85 private DateFormat mSlowFormat; 86 private FastDateFormat mFastFormat; 87 88 private boolean mShowThread = true; 89 private boolean mShowSourceName = true; 90 91 public LogScribe(PrintWriter writer) { 92 this(writer, (FastDateFormat)null); 93 } 94 95 public LogScribe(PrintWriter writer, DateFormat format) { 96 mWriter = writer; 97 mSlowFormat = format; 98 if (format == null) { 99 mFastFormat = 100 FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss.SSS z"); 101 } 102 else if (format instanceof SimpleDateFormat) { 103 SimpleDateFormat simple = (SimpleDateFormat)format; 104 String pattern = simple.toPattern(); 105 TimeZone timeZone = simple.getTimeZone(); 106 DateFormatSymbols symbols = simple.getDateFormatSymbols(); 107 mFastFormat = 108 FastDateFormat.getInstance(pattern, timeZone, null, symbols); 109 } 110 } 111 112 public LogScribe(PrintWriter writer, FastDateFormat format) { 113 mWriter = writer; 114 mSlowFormat = null; 115 if (format == null) { 116 format = FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss.SSS z"); 117 } 118 mFastFormat = format; 119 } 120 121 public void logMessage(LogEvent e) { 122 String message = e.getMessage(); 123 if (message != null) { 124 synchronized (mWriter) { 125 mWriter.print(createPrepend(e)); 126 mWriter.println(message); 127 mWriter.flush(); 128 } 129 } 130 } 131 132 public void logException(LogEvent e) { 133 Throwable t = e.getException(); 134 135 if (t == null) { 136 logMessage(e); 137 } 138 else { 139 synchronized (mWriter) { 140 mWriter.print(createPrepend(e)); 141 t.printStackTrace(mWriter); 142 mWriter.flush(); 143 } 144 } 145 } 146 147 150 public boolean isShowThreadEnabled() { 151 return mShowThread; 152 } 153 154 public void setShowThreadEnabled(boolean enabled) { 155 mShowThread = enabled; 156 } 157 158 161 public boolean isShowSourceEnabled() { 162 return mShowSourceName; 163 } 164 165 public void setShowSourceEnabled(boolean enabled) { 166 mShowSourceName = enabled; 167 } 168 169 172 protected String createPrepend(LogEvent e) { 173 StringBuffer pre = new StringBuffer (80); 174 175 String code = "??"; 176 switch (e.getType()) { 177 case LogEvent.DEBUG_TYPE: 178 code = " D"; 179 break; 180 case LogEvent.INFO_TYPE: 181 code = " I"; 182 break; 183 case LogEvent.WARN_TYPE: 184 code = "*W"; 185 break; 186 case LogEvent.ERROR_TYPE: 187 code = "*E"; 188 break; 189 } 190 191 pre.append(code); 192 pre.append(','); 193 if (mFastFormat != null) { 194 pre.append(mFastFormat.format(e.getTimestamp())); 195 } 196 else { 197 synchronized (mSlowFormat) { 198 pre.append(mSlowFormat.format(e.getTimestamp())); 199 } 200 } 201 202 if (isShowThreadEnabled()) { 203 pre.append(','); 204 pre.append(e.getThreadName()); 205 } 206 207 if (isShowSourceEnabled()) { 208 Log source = e.getLogSource(); 209 if (source != null) { 210 String sourceName = source.getName(); 211 if (sourceName != null) { 212 pre.append(','); 213 pre.append(sourceName); 214 } 215 } 216 } 217 218 pre.append('>'); 219 pre.append(' '); 220 221 return pre.toString(); 222 } 223 } 224 | Popular Tags |