1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.log;
16
17 import org.mortbay.util.DateCache;
18
19
20
21
22
23
24
25
26 public class StdErrLog implements Logger
27 {
28 private static DateCache _dateCache;
29 private static boolean __debug = System.getProperty("DEBUG",null)!=null;
30 private String _name;
31
32 StringBuffer _buffer = new StringBuffer();
33
34 static
35 {
36 try
37 {
38 _dateCache=new DateCache("yyyy-MM-dd HH:mm:ss");
39 }
40 catch(Exception e)
41 {
42 e.printStackTrace();
43 }
44
45 }
46
47 public StdErrLog()
48 {
49 this(null);
50 }
51
52 public StdErrLog(String name)
53 {
54 this._name=name==null?"":name;
55 }
56
57 public boolean isDebugEnabled()
58 {
59 return __debug;
60 }
61
62 public void setDebugEnabled(boolean enabled)
63 {
64 __debug=enabled;
65 }
66
67 public void info(String msg,Object arg0, Object arg1)
68 {
69 String d=_dateCache.now();
70 int ms=_dateCache.lastMs();
71 synchronized(_buffer)
72 {
73 tag(d,ms,":INFO:");
74 format(msg,arg0,arg1);
75 System.err.println(_buffer.toString());
76 }
77 }
78
79 public void debug(String msg,Throwable th)
80 {
81 if (__debug)
82 {
83 String d=_dateCache.now();
84 int ms=_dateCache.lastMs();
85 synchronized(_buffer)
86 {
87 tag(d,ms,":DBUG:");
88 format(msg);
89 format(th);
90 System.err.println(_buffer.toString());
91 }
92 }
93 }
94
95 public void debug(String msg,Object arg0, Object arg1)
96 {
97 if (__debug)
98 {
99 String d=_dateCache.now();
100 int ms=_dateCache.lastMs();
101 synchronized(_buffer)
102 {
103 tag(d,ms,":DBUG:");
104 format(msg,arg0,arg1);
105 System.err.println(_buffer.toString());
106 }
107 }
108 }
109
110 public void warn(String msg,Object arg0, Object arg1)
111 {
112 String d=_dateCache.now();
113 int ms=_dateCache.lastMs();
114 synchronized(_buffer)
115 {
116 tag(d,ms,":WARN:");
117 format(msg,arg0,arg1);
118 System.err.println(_buffer.toString());
119 }
120 }
121
122 public void warn(String msg, Throwable th)
123 {
124 String d=_dateCache.now();
125 int ms=_dateCache.lastMs();
126 synchronized(_buffer)
127 {
128 tag(d,ms,":WARN:");
129 format(msg);
130 format(th);
131 System.err.println(_buffer.toString());
132 }
133 }
134
135 private void tag(String d,int ms,String tag)
136 {
137 _buffer.setLength(0);
138 _buffer.append(d);
139 if (ms>99)
140 _buffer.append('.');
141 else if (ms>9)
142 _buffer.append(".0");
143 else
144 _buffer.append(".00");
145 _buffer.append(ms).append(tag).append(_name).append(':');
146 }
147
148 private void format(String msg, Object arg0, Object arg1)
149 {
150 int i0=msg.indexOf("{}");
151 int i1=i0<0?-1:msg.indexOf("{}",i0+2);
152
153 if (i0>=0)
154 {
155 format(msg.substring(0,i0));
156 format(String.valueOf(arg0));
157
158 if (i1>=0)
159 {
160 format(msg.substring(i0+2,i1));
161 format(String.valueOf(arg1));
162 format(msg.substring(i1+2));
163 }
164 else
165 {
166 format(msg.substring(i0+2));
167 if (arg1!=null)
168 {
169 _buffer.append(' ');
170 format(String.valueOf(arg1));
171 }
172 }
173 }
174 else
175 {
176 format(msg);
177 if (arg0!=null)
178 {
179 _buffer.append(' ');
180 format(String.valueOf(arg0));
181 }
182 if (arg1!=null)
183 {
184 _buffer.append(' ');
185 format(String.valueOf(arg1));
186 }
187 }
188 }
189
190 private void format(String msg)
191 {
192 for (int i=0;i<msg.length();i++)
193 {
194 char c=msg.charAt(i);
195 if (Character.isISOControl(c))
196 {
197 if (c=='\n')
198 _buffer.append('|');
199 else if (c=='\r')
200 _buffer.append('<');
201 else
202 _buffer.append('?');
203 }
204 else
205 _buffer.append(c);
206 }
207 }
208
209 private void format(Throwable th)
210 {
211 _buffer.append('\n');
212 format(th.toString());
213 StackTraceElement[] elements = th.getStackTrace();
214 for (int i=0;elements!=null && i<elements.length;i++)
215 {
216 _buffer.append("\n\tat ");
217 format(elements[i].toString());
218 }
219 }
220
221 public Logger getLogger(String name)
222 {
223 if ((name==null && this._name==null) ||
224 (name!=null && name.equals(this._name)))
225 return this;
226 return new StdErrLog(name);
227 }
228
229 public String toString()
230 {
231 return "STDERR"+_name;
232 }
233
234
235 }
236