1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j;
18
19 import org.apache.log4j.helpers.NullEnumeration;
20 import org.slf4j.LoggerFactory;
21 import org.slf4j.Marker;
22 import org.slf4j.MarkerFactory;
23 import org.slf4j.spi.LocationAwareLogger;
24
25 import java.util.Enumeration;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 @SuppressWarnings("rawtypes")
44 public class Category {
45
46 private static final String CATEGORY_FQCN = Category.class.getName();
47
48 private final String name;
49
50 protected org.slf4j.Logger slf4jLogger;
51 private org.slf4j.spi.LocationAwareLogger locationAwareLogger;
52
53 private static final Marker FATAL_MARKER = MarkerFactory.getMarker("FATAL");
54
55 Category(String name) {
56 this.name = name;
57 slf4jLogger = LoggerFactory.getLogger(name);
58 if (slf4jLogger instanceof LocationAwareLogger) {
59 locationAwareLogger = (LocationAwareLogger) slf4jLogger;
60 }
61 }
62
63 public static Category getInstance(Class clazz) {
64 return Log4jLoggerFactory.getLogger(clazz.getName());
65 }
66
67 public static Category getInstance(String name) {
68 return Log4jLoggerFactory.getLogger(name);
69 }
70
71 public final Category getParent() {
72 return null;
73 }
74
75
76
77
78
79
80 public String getName() {
81 return name;
82 }
83
84 public Appender getAppender(String name) {
85 return null;
86 }
87
88 public Enumeration getAllAppenders() {
89 return NullEnumeration.getInstance();
90 }
91
92
93
94
95
96
97
98
99
100 public Level getEffectiveLevel() {
101 if (slf4jLogger.isTraceEnabled()) {
102 return Level.TRACE;
103 }
104 if (slf4jLogger.isDebugEnabled()) {
105 return Level.DEBUG;
106 }
107 if (slf4jLogger.isInfoEnabled()) {
108 return Level.INFO;
109 }
110 if (slf4jLogger.isWarnEnabled()) {
111 return Level.WARN;
112 }
113 return Level.ERROR;
114 }
115
116
117
118
119
120
121
122 final public Level getLevel() {
123 return null;
124 }
125
126
127
128
129
130 final public Level getPriority() {
131 return null;
132 }
133
134
135
136
137
138
139
140 public boolean isDebugEnabled() {
141 return slf4jLogger.isDebugEnabled();
142 }
143
144
145
146
147
148
149 public boolean isInfoEnabled() {
150 return slf4jLogger.isInfoEnabled();
151 }
152
153
154
155
156
157
158 public boolean isWarnEnabled() {
159 return slf4jLogger.isWarnEnabled();
160 }
161
162
163
164
165
166
167 public boolean isErrorEnabled() {
168 return slf4jLogger.isErrorEnabled();
169 }
170
171
172
173
174
175
176
177
178
179 public boolean isEnabledFor(Priority p) {
180 switch (p.level) {
181 case Level.TRACE_INT:
182 return slf4jLogger.isTraceEnabled();
183 case Level.DEBUG_INT:
184 return slf4jLogger.isDebugEnabled();
185 case Level.INFO_INT:
186 return slf4jLogger.isInfoEnabled();
187 case Level.WARN_INT:
188 return slf4jLogger.isWarnEnabled();
189 case Level.ERROR_INT:
190 return slf4jLogger.isErrorEnabled();
191 case Priority.FATAL_INT:
192 return slf4jLogger.isErrorEnabled();
193 }
194 return false;
195 }
196
197 void differentiatedLog(Marker marker, String fqcn, int level, Object message, Throwable t) {
198
199 String m = convertToString(message);
200 if (locationAwareLogger != null) {
201 locationAwareLogger.log(marker, fqcn, level, m, null, t);
202 } else {
203 switch (level) {
204 case LocationAwareLogger.TRACE_INT:
205 slf4jLogger.trace(marker, m, (Throwable) t);
206 break;
207 case LocationAwareLogger.DEBUG_INT:
208 slf4jLogger.debug(marker, m, (Throwable) t);
209 break;
210 case LocationAwareLogger.INFO_INT:
211 slf4jLogger.info(marker, m, (Throwable) t);
212 break;
213 case LocationAwareLogger.WARN_INT:
214 slf4jLogger.warn(marker, m, (Throwable) t);
215 break;
216 case LocationAwareLogger.ERROR_INT:
217 slf4jLogger.error(marker, m, (Throwable) t);
218 break;
219 }
220 }
221 }
222
223
224
225
226
227
228 public void debug(Object message) {
229 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.DEBUG_INT, message, null);
230 }
231
232
233
234
235
236
237
238
239 public void debug(Object message, Throwable t) {
240 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.DEBUG_INT, message, t);
241 }
242
243
244
245
246
247
248 public void info(Object message) {
249 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.INFO_INT, message, null);
250 }
251
252
253
254
255
256
257
258 public void info(Object message, Throwable t) {
259 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.INFO_INT, message, t);
260 }
261
262
263
264
265
266
267
268 public void warn(Object message) {
269 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.WARN_INT, message, null);
270 }
271
272
273
274
275
276
277
278
279 public void warn(Object message, Throwable t) {
280 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.WARN_INT, message, t);
281 }
282
283
284
285
286
287
288
289 public void error(Object message) {
290 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, null);
291 }
292
293
294
295
296
297
298
299
300
301 public void error(Object message, Throwable t) {
302 differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, t);
303 }
304
305
306
307
308
309
310
311 public void fatal(Object message) {
312 differentiatedLog(FATAL_MARKER, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, null);
313 }
314
315
316
317
318
319
320
321
322
323 public void fatal(Object message, Throwable t) {
324 differentiatedLog(FATAL_MARKER, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, t);
325 }
326
327 protected void forcedLog(String FQCN, Priority p, Object msg, Throwable t) {
328 log(FQCN, p, msg, t);
329 }
330
331
332 public void log(String FQCN, Priority p, Object msg, Throwable t) {
333 int levelInt = priorityToLevelInt(p);
334 differentiatedLog(null, FQCN, levelInt, msg, t);
335 }
336
337 public void log(Priority p, Object message, Throwable t) {
338 int levelInt = priorityToLevelInt(p);
339 differentiatedLog(null, CATEGORY_FQCN, levelInt, message, t);
340 }
341
342 public void log(Priority p, Object message) {
343 int levelInt = priorityToLevelInt(p);
344 differentiatedLog(null, CATEGORY_FQCN, levelInt, message, null);
345 }
346
347 private int priorityToLevelInt(Priority p) {
348 switch (p.level) {
349 case Level.TRACE_INT:
350 case Level.X_TRACE_INT:
351 return LocationAwareLogger.TRACE_INT;
352 case Priority.DEBUG_INT:
353 return LocationAwareLogger.DEBUG_INT;
354 case Priority.INFO_INT:
355 return LocationAwareLogger.INFO_INT;
356 case Priority.WARN_INT:
357 return LocationAwareLogger.WARN_INT;
358 case Priority.ERROR_INT:
359 return LocationAwareLogger.ERROR_INT;
360 case Priority.FATAL_INT:
361 return LocationAwareLogger.ERROR_INT;
362 default:
363 throw new IllegalStateException("Unknown Priority " + p);
364 }
365 }
366
367 protected final String convertToString(Object message) {
368 if (message == null) {
369 return (String) message;
370 } else {
371 return message.toString();
372 }
373 }
374
375 public void setAdditivity(boolean additive) {
376
377 }
378
379 public void addAppender(Appender newAppender) {
380
381 }
382
383 public void setLevel(Level level) {
384
385 }
386
387 public boolean getAdditivity() {
388 return false;
389 }
390
391 public void assertLog(boolean assertion, String msg) {
392 if (!assertion)
393 error(msg);
394 }
395
396 }