1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.bridge;
26
27 import java.text.MessageFormat;
28 import java.util.MissingResourceException;
29 import java.util.ResourceBundle;
30 import java.util.logging.Handler;
31 import java.util.logging.Level;
32 import java.util.logging.LogManager;
33 import java.util.logging.LogRecord;
34
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37 import org.slf4j.spi.LocationAwareLogger;
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 public class SLF4JBridgeHandler extends Handler {
92
93
94 private static final String FQCN = java.util.logging.Logger.class.getName();
95 private static final String UNKNOWN_LOGGER_NAME = "unknown.jul.logger";
96
97 private static final int TRACE_LEVEL_THRESHOLD = Level.FINEST.intValue();
98 private static final int DEBUG_LEVEL_THRESHOLD = Level.FINE.intValue();
99 private static final int INFO_LEVEL_THRESHOLD = Level.INFO.intValue();
100 private static final int WARN_LEVEL_THRESHOLD = Level.WARNING.intValue();
101
102
103
104
105
106
107
108
109
110
111 public static void install() {
112 LogManager.getLogManager().getLogger("").addHandler(
113 new SLF4JBridgeHandler());
114 }
115
116
117
118
119
120
121
122
123
124
125 public static void uninstall() throws SecurityException {
126 java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger(
127 "");
128 Handler[] handlers = rootLogger.getHandlers();
129 for (int i = 0; i < handlers.length; i++) {
130 if (handlers[i] instanceof SLF4JBridgeHandler) {
131 rootLogger.removeHandler(handlers[i]);
132 }
133 }
134 }
135
136
137
138
139
140
141 public static boolean isInstalled() throws SecurityException {
142 java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger(
143 "");
144 Handler[] handlers = rootLogger.getHandlers();
145 for (int i = 0; i < handlers.length; i++) {
146 if (handlers[i] instanceof SLF4JBridgeHandler) {
147 return true;
148 }
149 }
150 return false;
151 }
152
153
154
155
156
157
158 public SLF4JBridgeHandler() {
159 }
160
161
162
163
164 public void close() {
165
166 }
167
168
169
170
171 public void flush() {
172
173 }
174
175
176
177
178 protected Logger getSLF4JLogger(LogRecord record) {
179 String name = record.getLoggerName();
180 if (name == null) {
181 name = UNKNOWN_LOGGER_NAME;
182 }
183 return LoggerFactory.getLogger(name);
184 }
185
186 protected void callLocationAwareLogger(LocationAwareLogger lal,
187 LogRecord record) {
188 int julLevelValue = record.getLevel().intValue();
189 int slf4jLevel;
190
191 if (julLevelValue <= TRACE_LEVEL_THRESHOLD) {
192 slf4jLevel = LocationAwareLogger.TRACE_INT;
193 } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) {
194 slf4jLevel = LocationAwareLogger.DEBUG_INT;
195 } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) {
196 slf4jLevel = LocationAwareLogger.INFO_INT;
197 } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) {
198 slf4jLevel = LocationAwareLogger.WARN_INT;
199 } else {
200 slf4jLevel = LocationAwareLogger.ERROR_INT;
201 }
202 String i18nMessage = getMessageI18N(record);
203 lal.log(null, FQCN, slf4jLevel, i18nMessage, null, record.getThrown());
204 }
205
206 protected void callPlainSLF4JLogger(Logger slf4jLogger, LogRecord record) {
207 String i18nMessage = getMessageI18N(record);
208 int julLevelValue = record.getLevel().intValue();
209 if (julLevelValue <= TRACE_LEVEL_THRESHOLD) {
210 slf4jLogger.trace(i18nMessage, record.getThrown());
211 } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) {
212 slf4jLogger.debug(i18nMessage, record.getThrown());
213 } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) {
214 slf4jLogger.info(i18nMessage, record.getThrown());
215 } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) {
216 slf4jLogger.warn(i18nMessage, record.getThrown());
217 } else {
218 slf4jLogger.error(i18nMessage, record.getThrown());
219 }
220 }
221
222
223
224
225
226
227
228 private String getMessageI18N(LogRecord record) {
229 String message = record.getMessage();
230
231 if (message == null) {
232 return null;
233 }
234
235 ResourceBundle bundle = record.getResourceBundle();
236 if (bundle != null) {
237 try {
238 message = bundle.getString(message);
239 } catch (MissingResourceException e) {
240 }
241 }
242 Object[] params = record.getParameters();
243 if (params != null) {
244 message = MessageFormat.format(message, params);
245 }
246 return message;
247 }
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262 public void publish(LogRecord record) {
263
264 if (record == null) {
265 return;
266 }
267
268 Logger slf4jLogger = getSLF4JLogger(record);
269 String message = record.getMessage();
270
271
272
273
274 if (message == null) {
275 message = "";
276 }
277 if (slf4jLogger instanceof LocationAwareLogger) {
278 callLocationAwareLogger((LocationAwareLogger) slf4jLogger, record);
279 } else {
280 callPlainSLF4JLogger(slf4jLogger, record);
281 }
282 }
283
284 }