001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements. See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache license, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License. You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the license for the specific language governing permissions and
015     * limitations under the license.
016     */
017    package org.slf4j.impl;
018    
019    import org.apache.logging.log4j.Level;
020    import org.apache.logging.log4j.LogManager;
021    import org.apache.logging.log4j.Logger;
022    import org.apache.logging.log4j.message.Message;
023    import org.apache.logging.log4j.message.ParameterizedMessage;
024    import org.apache.logging.log4j.message.SimpleMessage;
025    import org.apache.logging.log4j.message.StructuredDataMessage;
026    import org.apache.logging.log4j.spi.AbstractLogger;
027    import org.apache.logging.log4j.spi.AbstractLoggerWrapper;
028    import org.slf4j.Marker;
029    import org.slf4j.MarkerFactory;
030    import org.slf4j.ext.EventData;
031    import org.slf4j.spi.LocationAwareLogger;
032    
033    import java.util.Map;
034    
035    /**
036     *
037     */
038    public class SLF4JLogger implements LocationAwareLogger {
039    
040        private static final String FQCN = SLF4JLogger.class.getName();
041        private static final Marker EVENT_MARKER = MarkerFactory.getMarker("EVENT");
042        private final boolean eventLogger;
043        private final AbstractLoggerWrapper logger;
044        private final String name;
045    
046        public SLF4JLogger(AbstractLogger logger, String name) {
047            Logger l = LogManager.getLogger(name);
048            this.logger = new AbstractLoggerWrapper(logger, name);
049            eventLogger = "EventLogger".equals(name);
050            this.name = name;
051        }
052    
053        public void trace(String format) {
054            if (logger.isTraceEnabled()) {
055                logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), null);
056            }
057        }
058    
059        public void trace(String format, Object o) {
060            if (logger.isTraceEnabled()) {
061                logger.log(null, FQCN, Level.TRACE, new ParameterizedMessage(format, o), null);
062            }
063        }
064    
065        public void trace(String format, Object arg1, Object arg2) {
066            if (logger.isTraceEnabled()) {
067                ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
068                logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
069            }
070        }
071    
072        public void trace(String format, Object[] args) {
073            if (logger.isTraceEnabled()) {
074                ParameterizedMessage msg = new ParameterizedMessage(format, args);
075                logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable());
076            }
077        }
078    
079        public void trace(String format, Throwable t) {
080            if (logger.isTraceEnabled()) {
081                logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), t);
082            }
083        }
084    
085        public boolean isTraceEnabled() {
086            return logger.isTraceEnabled();
087        }
088    
089        public boolean isTraceEnabled(Marker marker) {
090            return logger.isTraceEnabled((org.apache.logging.log4j.Marker) marker);
091        }
092    
093        public void trace(Marker marker, String s) {
094            if (isTraceEnabled(marker)) {
095                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, new SimpleMessage(s), null);
096            }
097        }
098    
099        public void trace(Marker marker, String s, Object o) {
100            if (isTraceEnabled(marker)) {
101                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
102                    new ParameterizedMessage(s, o), null);
103            }
104        }
105    
106        public void trace(Marker marker, String s, Object o, Object o1) {
107            if (isTraceEnabled(marker)) {
108                ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
109                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
110            }
111        }
112    
113        public void trace(Marker marker, String s, Object[] objects) {
114            if (isTraceEnabled(marker)) {
115                ParameterizedMessage msg = new ParameterizedMessage(s, objects);
116                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable());
117            }
118        }
119    
120        public void trace(Marker marker, String s, Throwable throwable) {
121            if (isTraceEnabled(marker)) {
122                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE,
123                    new SimpleMessage(s), throwable);
124            }
125        }
126    
127        public void debug(String format) {
128            if (logger.isDebugEnabled()) {
129                logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), null);
130            }
131        }
132    
133        public void debug(String format, Object o) {
134            if (logger.isDebugEnabled()) {
135                logger.log(null, FQCN, Level.DEBUG, new ParameterizedMessage(format, o), null);
136            }
137        }
138    
139        public void debug(String format, Object arg1, Object arg2) {
140            if (logger.isDebugEnabled()) {
141                ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
142                logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
143            }
144        }
145    
146        public void debug(String format, Object[] args) {
147            if (logger.isDebugEnabled()) {
148                ParameterizedMessage msg = new ParameterizedMessage(format, args);
149                logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable());
150            }
151        }
152    
153        public void debug(String format, Throwable t) {
154            if (logger.isDebugEnabled()) {
155                logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), t);
156            }
157        }
158    
159        public boolean isDebugEnabled() {
160            return logger.isDebugEnabled();
161        }
162    
163        public boolean isDebugEnabled(Marker marker) {
164            return logger.isDebugEnabled((org.apache.logging.log4j.Marker) marker);
165        }
166    
167        public void debug(Marker marker, String s) {
168            if (isDebugEnabled(marker)) {
169                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, new SimpleMessage(s), null);
170            }
171        }
172    
173        public void debug(Marker marker, String s, Object o) {
174            if (isDebugEnabled(marker)) {
175                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
176                    new ParameterizedMessage(s, o), null);
177            }
178        }
179    
180        public void debug(Marker marker, String s, Object o, Object o1) {
181            if (isDebugEnabled(marker)) {
182                ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
183                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
184            }
185        }
186    
187        public void debug(Marker marker, String s, Object[] objects) {
188            if (isDebugEnabled(marker)) {
189                ParameterizedMessage msg = new ParameterizedMessage(s, objects);
190                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable());
191            }
192        }
193    
194        public void debug(Marker marker, String s, Throwable throwable) {
195            if (isDebugEnabled(marker)) {
196                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG,
197                    new SimpleMessage(s), throwable);
198            }
199        }
200    
201        public void info(String format) {
202            if (logger.isInfoEnabled()) {
203                logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), null);
204            }
205        }
206    
207        public void info(String format, Object o) {
208            if (logger.isInfoEnabled()) {
209                logger.log(null, FQCN, Level.INFO, new ParameterizedMessage(format, o), null);
210            }
211        }
212    
213        public void info(String format, Object arg1, Object arg2) {
214            if (logger.isInfoEnabled()) {
215                ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
216                logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
217            }
218        }
219    
220        public void info(String format, Object[] args) {
221            if (logger.isInfoEnabled()) {
222                ParameterizedMessage msg = new ParameterizedMessage(format, args);
223                logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable());
224            }
225        }
226    
227        public void info(String format, Throwable t) {
228            if (logger.isInfoEnabled()) {
229                logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), t);
230            }
231        }
232    
233        public boolean isInfoEnabled() {
234            return logger.isInfoEnabled();
235        }
236    
237        public boolean isInfoEnabled(Marker marker) {
238            return logger.isInfoEnabled((org.apache.logging.log4j.Marker) marker);
239        }
240    
241        public void info(Marker marker, String s) {
242            if (isInfoEnabled(marker)) {
243                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, new SimpleMessage(s), null);
244            }
245        }
246    
247        public void info(Marker marker, String s, Object o) {
248            if (isInfoEnabled(marker)) {
249                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
250                    new ParameterizedMessage(s, o), null);
251            }
252        }
253    
254        public void info(Marker marker, String s, Object o, Object o1) {
255            if (isInfoEnabled(marker)) {
256                ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
257                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
258            }
259        }
260    
261        public void info(Marker marker, String s, Object[] objects) {
262            if (isInfoEnabled(marker)) {
263                ParameterizedMessage msg = new ParameterizedMessage(s, objects);
264                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable());
265            }
266        }
267    
268        public void info(Marker marker, String s, Throwable throwable) {
269            if (isInfoEnabled(marker)) {
270                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO,
271                    new SimpleMessage(s), throwable);
272            }
273        }
274    
275        public void warn(String format) {
276            if (logger.isWarnEnabled()) {
277                logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), null);
278            }
279        }
280    
281        public void warn(String format, Object o) {
282            if (logger.isWarnEnabled()) {
283                logger.log(null, FQCN, Level.WARN, new ParameterizedMessage(format, o), null);
284            }
285        }
286    
287        public void warn(String format, Object arg1, Object arg2) {
288            if (logger.isWarnEnabled()) {
289                ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
290                logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
291            }
292        }
293    
294        public void warn(String format, Object[] args) {
295            if (logger.isWarnEnabled()) {
296                ParameterizedMessage msg = new ParameterizedMessage(format, args);
297                logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable());
298            }
299        }
300    
301        public void warn(String format, Throwable t) {
302            if (logger.isWarnEnabled()) {
303                logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), t);
304            }
305        }
306    
307        public boolean isWarnEnabled() {
308            return logger.isWarnEnabled();
309        }
310    
311        public boolean isWarnEnabled(Marker marker) {
312            return logger.isWarnEnabled((org.apache.logging.log4j.Marker) marker);
313        }
314    
315        public void warn(Marker marker, String s) {
316            if (isWarnEnabled(marker)) {
317                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, new SimpleMessage(s), null);
318            }
319        }
320    
321        public void warn(Marker marker, String s, Object o) {
322            if (isWarnEnabled(marker)) {
323                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
324                    new ParameterizedMessage(s, o), null);
325            }
326        }
327    
328        public void warn(Marker marker, String s, Object o, Object o1) {
329            if (isWarnEnabled(marker)) {
330                ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
331                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
332            }
333        }
334    
335        public void warn(Marker marker, String s, Object[] objects) {
336            if (isWarnEnabled(marker)) {
337                ParameterizedMessage msg = new ParameterizedMessage(s, objects);
338                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable());
339            }
340        }
341    
342        public void warn(Marker marker, String s, Throwable throwable) {
343            if (isWarnEnabled(marker)) {
344                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN,
345                    new SimpleMessage(s), throwable);
346            }
347        }
348    
349        public void error(String format) {
350            if (logger.isErrorEnabled()) {
351                logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), null);
352            }
353        }
354    
355        public void error(String format, Object o) {
356            if (logger.isErrorEnabled()) {
357                logger.log(null, FQCN, Level.ERROR, new ParameterizedMessage(format, o), null);
358            }
359        }
360    
361        public void error(String format, Object arg1, Object arg2) {
362            if (logger.isErrorEnabled()) {
363                ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2);
364                logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
365            }
366        }
367    
368        public void error(String format, Object[] args) {
369            if (logger.isErrorEnabled()) {
370                ParameterizedMessage msg = new ParameterizedMessage(format, args);
371                logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable());
372            }
373        }
374    
375        public void error(String format, Throwable t) {
376            if (logger.isErrorEnabled()) {
377                logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), t);
378            }
379        }
380    
381        public boolean isErrorEnabled() {
382            return logger.isErrorEnabled();
383        }
384    
385        public boolean isErrorEnabled(Marker marker) {
386            return logger.isErrorEnabled((org.apache.logging.log4j.Marker) marker);
387        }
388    
389        public void error(Marker marker, String s) {
390            if (isErrorEnabled(marker)) {
391                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, new SimpleMessage(s), null);
392            }
393        }
394    
395        public void error(Marker marker, String s, Object o) {
396            if (isErrorEnabled(marker)) {
397                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
398                    new ParameterizedMessage(s, o), null);
399            }
400        }
401    
402        public void error(Marker marker, String s, Object o, Object o1) {
403            if (isErrorEnabled(marker)) {
404                ParameterizedMessage msg = new ParameterizedMessage(s, o, o1);
405                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
406            }
407        }
408    
409        public void error(Marker marker, String s, Object[] objects) {
410            if (isErrorEnabled(marker)) {
411                ParameterizedMessage msg = new ParameterizedMessage(s, objects);
412                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable());
413            }
414        }
415    
416        public void error(Marker marker, String s, Throwable throwable) {
417            if (isErrorEnabled(marker)) {
418                logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR,
419                    new SimpleMessage(s), throwable);
420            }
421        }
422    
423    
424        public void log(Marker marker, String fqcn, int i, String s1, Object[] objects, Throwable throwable) {
425            Message msg;
426            if (eventLogger && marker != null && marker.contains(EVENT_MARKER)) {
427                try {
428                    EventData data = (objects != null && objects[0] instanceof EventData) ? (EventData) objects[0] :
429                        new EventData(s1);
430                    msg = new StructuredDataMessage(data.getEventId(), data.getMessage(), data.getEventType());
431                    for (Map.Entry entry : data.getEventMap().entrySet()) {
432                        String key = entry.getKey().toString();
433                        if (EventData.EVENT_TYPE.equals(key) || EventData.EVENT_ID.equals(key) ||
434                            EventData.EVENT_MESSAGE.equals(key)) {
435                            continue;
436                        }
437                        ((StructuredDataMessage) msg).put(entry.getKey().toString(), entry.getValue().toString());
438                    }
439                } catch (Exception ex) {
440                    msg = new ParameterizedMessage(s1, objects, throwable);
441                }
442    
443           } else if (objects == null) {
444                msg = new SimpleMessage(s1);
445            } else {
446                msg = new ParameterizedMessage(s1, objects, throwable);
447                if (throwable != null) {
448                    throwable = ((ParameterizedMessage) msg).getThrowable();
449                }
450            }
451            logger.log((org.apache.logging.log4j.Marker) marker, fqcn, getLevel(i), msg, throwable);
452        }
453    
454        public String getName() {
455            return name;
456        }
457    
458        private Level getLevel(int i) {
459    
460            switch (i) {
461                case TRACE_INT :
462                    return Level.TRACE;
463                case DEBUG_INT :
464                    return Level.DEBUG;
465                case INFO_INT :
466                    return Level.INFO;
467                case WARN_INT :
468                    return Level.WARN;
469                case ERROR_INT :
470                    return Level.ERROR;
471            }
472            return Level.ERROR;
473        }
474    }