1
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, null, new 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