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
26
27
28
29
30
31
32 package org.slf4j.bridge;
33
34 import java.util.logging.Handler;
35 import java.util.logging.Level;
36 import java.util.logging.LogManager;
37 import java.util.logging.LogRecord;
38
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41 import org.slf4j.spi.LocationAwareLogger;
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 public class SLF4JBridgeHandler extends Handler {
81
82
83 private static final String FQCN = java.util.logging.Logger.class.getName();
84 private static final String UNKNOWN_LOGGER_NAME = "unknown.jul.logger";
85
86 private static final int TRACE_LEVEL_THRESHOLD = Level.FINEST.intValue();
87 private static final int DEBUG_LEVEL_THRESHOLD = Level.FINE.intValue();
88 private static final int INFO_LEVEL_THRESHOLD = Level.INFO.intValue();
89 private static final int WARN_LEVEL_THRESHOLD = Level.WARNING.intValue();
90
91
92
93
94
95 public static void install() {
96 LogManager.getLogManager().reset();
97 LogManager.getLogManager().getLogger("").addHandler(new SLF4JBridgeHandler());
98 }
99
100
101
102
103
104
105
106
107
108
109
110 public static void uninstall() throws Exception {
111 LogManager.getLogManager().readConfiguration();
112 }
113
114
115
116
117
118 public SLF4JBridgeHandler() {
119 }
120
121
122
123
124 public void close() {
125
126 }
127
128
129
130
131 public void flush() {
132
133 }
134
135
136
137
138 protected Logger getSLF4JLogger(LogRecord record) {
139 String name = record.getLoggerName();
140 if (name == null) {
141 name = UNKNOWN_LOGGER_NAME;
142 }
143 return LoggerFactory.getLogger(name);
144 }
145
146 protected void callLocationAwareLogger(LocationAwareLogger lal, LogRecord record) {
147 int julLevelValue = record.getLevel().intValue();
148 int slf4jLevel;
149
150 if (julLevelValue <= TRACE_LEVEL_THRESHOLD) {
151 slf4jLevel = LocationAwareLogger.TRACE_INT;
152 } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) {
153 slf4jLevel = LocationAwareLogger.DEBUG_INT;
154 } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) {
155 slf4jLevel = LocationAwareLogger.INFO_INT;
156 } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) {
157 slf4jLevel = LocationAwareLogger.WARN_INT;
158 } else {
159 slf4jLevel = LocationAwareLogger.ERROR_INT;
160 }
161 lal.log(null, FQCN, slf4jLevel, record.getMessage(), record.getThrown());
162 }
163
164 protected void callPlainSLF4JLogger(Logger slf4jLogger, LogRecord record) {
165 int julLevelValue = record.getLevel().intValue();
166 if (julLevelValue <= TRACE_LEVEL_THRESHOLD) {
167 slf4jLogger.trace(record.getMessage(), record.getThrown());
168 } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) {
169 slf4jLogger.debug(record.getMessage(), record.getThrown());
170 } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) {
171 slf4jLogger.info(record.getMessage(), record.getThrown());
172 } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) {
173 slf4jLogger.warn(record.getMessage(), record.getThrown());
174 } else {
175 slf4jLogger.error(record.getMessage(), record.getThrown());
176 }
177 }
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192 public void publish(LogRecord record) {
193
194 if (record == null) {
195 return;
196 }
197
198 Logger slf4jLogger = getSLF4JLogger(record);
199 String message = record.getMessage();
200 if (message == null) {
201 return;
202 }
203 if (slf4jLogger instanceof LocationAwareLogger) {
204 callLocationAwareLogger((LocationAwareLogger) slf4jLogger, record);
205 } else {
206 callPlainSLF4JLogger(slf4jLogger, record);
207 }
208 }
209 }