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 }