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