1 /*
2  * JBoss, Home of Professional Open Source.
3  *
4  * Copyright 2013 Red Hat, Inc.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18
19 package org.jboss.logging;
20
21 import org.apache.logging.log4j.LogManager;
22 import org.apache.logging.log4j.LoggingException;
23 import org.apache.logging.log4j.message.MessageFormatMessageFactory;
24 import org.apache.logging.log4j.message.StringFormattedMessage;
25 import org.apache.logging.log4j.spi.AbstractLogger;
26
27 final class Log4j2Logger extends Logger {
28
29     private static final long serialVersionUID = -2507841068232627725L;
30
31     private final AbstractLogger logger;
32     private final MessageFormatMessageFactory messageFactory;
33
34     Log4j2Logger(final String name) {
35         super(name);
36         org.apache.logging.log4j.Logger logger = LogManager.getLogger(name);
37         if (!(logger instanceof AbstractLogger)) {
38             throw new LoggingException("The logger for [" + name + "] does not extend AbstractLogger. Actual logger: " + logger.getClass().getName());
39         }
40         this.logger = (AbstractLogger)logger;
41         this.messageFactory = new MessageFormatMessageFactory();
42     }
43
44     @Override
45     public boolean isEnabled(final Level level) {
46         return this.logger.isEnabled(Log4j2Logger.translate(level));
47     }
48
49     @Override
50     protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
51         final org.apache.logging.log4j.Level translatedLevel = Log4j2Logger.translate(level);
52         if (this.logger.isEnabled(translatedLevel)) {
53             try {
54                 this.logger.logMessage(loggerClassName, translatedLevel, null,
55                         (parameters == null || parameters.length == 0) ? this.messageFactory.newMessage(message) : this.messageFactory.newMessage(String.valueOf(message), parameters),
56                         thrown);
57             } catch (Throwable ignored) { }
58         }
59     }
60
61     @Override
62     protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
63         final org.apache.logging.log4j.Level translatedLevel = Log4j2Logger.translate(level);
64         if (this.logger.isEnabled(translatedLevel)) {
65             try {
66                 this.logger.logMessage(loggerClassName, translatedLevel, nullnew StringFormattedMessage(format, parameters), thrown);
67             } catch (Throwable ignored) { }
68         }
69     }
70
71     private static org.apache.logging.log4j.Level translate(final Level level) {
72         if (level == Level.TRACE) {
73             return org.apache.logging.log4j.Level.TRACE;
74         } else if (level == Level.DEBUG) {
75             return org.apache.logging.log4j.Level.DEBUG;
76         }
77         return infoOrHigher(level);
78     }
79
80     private static org.apache.logging.log4j.Level infoOrHigher(final Level level) {
81         if (level == Level.INFO) {
82             return org.apache.logging.log4j.Level.INFO;
83         } else if (level == Level.WARN) {
84             return org.apache.logging.log4j.Level.WARN;
85         } else if (level == Level.ERROR) {
86             return org.apache.logging.log4j.Level.ERROR;
87         } else if (level == Level.FATAL) {
88             return org.apache.logging.log4j.Level.FATAL;
89         }
90         return org.apache.logging.log4j.Level.ALL;
91     }
92 }
93