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