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 */ 017package org.slf4j.impl; 018 019import org.apache.logging.log4j.Level; 020import org.apache.logging.log4j.message.Message; 021import org.apache.logging.log4j.message.ParameterizedMessage; 022import org.apache.logging.log4j.message.SimpleMessage; 023import org.apache.logging.log4j.spi.AbstractLogger; 024import org.apache.logging.log4j.spi.AbstractLoggerWrapper; 025import org.slf4j.Marker; 026import org.slf4j.MarkerFactory; 027import org.slf4j.helpers.EventDataConverter; 028import org.slf4j.spi.LocationAwareLogger; 029 030/** 031 * 032 */ 033public class SLF4JLogger implements LocationAwareLogger { 034 035 private static final String FQCN = SLF4JLogger.class.getName(); 036 private static final Marker EVENT_MARKER = MarkerFactory.getMarker("EVENT"); 037 private final boolean eventLogger; 038 private final AbstractLoggerWrapper logger; 039 private final String name; 040 private final EventDataConverter converter; 041 042 public SLF4JLogger(final AbstractLogger logger, final String name) { 043 this.logger = new AbstractLoggerWrapper(logger, name, null); 044 this.eventLogger = "EventLogger".equals(name); 045 this.name = name; 046 this.converter = createConverter(); 047 } 048 049 @Override 050 public void trace(final String format) { 051 if (logger.isTraceEnabled()) { 052 logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), null); 053 } 054 } 055 056 @Override 057 public void trace(final String format, final Object o) { 058 if (logger.isTraceEnabled()) { 059 logger.log(null, FQCN, Level.TRACE, new ParameterizedMessage(format, o), null); 060 } 061 } 062 063 @Override 064 public void trace(final String format, final Object arg1, final Object arg2) { 065 if (logger.isTraceEnabled()) { 066 final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2); 067 logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable()); 068 } 069 } 070 071 @Override 072 public void trace(final String format, final Object... args) { 073 if (logger.isTraceEnabled()) { 074 final ParameterizedMessage msg = new ParameterizedMessage(format, args); 075 logger.log(null, FQCN, Level.TRACE, msg, msg.getThrowable()); 076 } 077 } 078 079 @Override 080 public void trace(final String format, final Throwable t) { 081 if (logger.isTraceEnabled()) { 082 logger.log(null, FQCN, Level.TRACE, new SimpleMessage(format), t); 083 } 084 } 085 086 @Override 087 public boolean isTraceEnabled() { 088 return logger.isTraceEnabled(); 089 } 090 091 @Override 092 public boolean isTraceEnabled(final Marker marker) { 093 return logger.isTraceEnabled((org.apache.logging.log4j.Marker) marker); 094 } 095 096 @Override 097 public void trace(final Marker marker, final String s) { 098 if (isTraceEnabled(marker)) { 099 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, new SimpleMessage(s), null); 100 } 101 } 102 103 @Override 104 public void trace(final Marker marker, final String s, final Object o) { 105 if (isTraceEnabled(marker)) { 106 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, 107 new ParameterizedMessage(s, o), null); 108 } 109 } 110 111 @Override 112 public void trace(final Marker marker, final String s, final Object o, final Object o1) { 113 if (isTraceEnabled(marker)) { 114 final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1); 115 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable()); 116 } 117 } 118 119 @Override 120 public void trace(final Marker marker, final String s, final Object... objects) { 121 if (isTraceEnabled(marker)) { 122 final ParameterizedMessage msg = new ParameterizedMessage(s, objects); 123 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, msg, msg.getThrowable()); 124 } 125 } 126 127 @Override 128 public void trace(final Marker marker, final String s, final Throwable throwable) { 129 if (isTraceEnabled(marker)) { 130 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.TRACE, 131 new SimpleMessage(s), throwable); 132 } 133 } 134 135 @Override 136 public void debug(final String format) { 137 if (logger.isDebugEnabled()) { 138 logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), null); 139 } 140 } 141 142 @Override 143 public void debug(final String format, final Object o) { 144 if (logger.isDebugEnabled()) { 145 logger.log(null, FQCN, Level.DEBUG, new ParameterizedMessage(format, o), null); 146 } 147 } 148 149 @Override 150 public void debug(final String format, final Object arg1, final Object arg2) { 151 if (logger.isDebugEnabled()) { 152 final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2); 153 logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable()); 154 } 155 } 156 157 @Override 158 public void debug(final String format, final Object... args) { 159 if (logger.isDebugEnabled()) { 160 final ParameterizedMessage msg = new ParameterizedMessage(format, args); 161 logger.log(null, FQCN, Level.DEBUG, msg, msg.getThrowable()); 162 } 163 } 164 165 @Override 166 public void debug(final String format, final Throwable t) { 167 if (logger.isDebugEnabled()) { 168 logger.log(null, FQCN, Level.DEBUG, new SimpleMessage(format), t); 169 } 170 } 171 172 @Override 173 public boolean isDebugEnabled() { 174 return logger.isDebugEnabled(); 175 } 176 177 @Override 178 public boolean isDebugEnabled(final Marker marker) { 179 return logger.isDebugEnabled((org.apache.logging.log4j.Marker) marker); 180 } 181 182 @Override 183 public void debug(final Marker marker, final String s) { 184 if (isDebugEnabled(marker)) { 185 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, new SimpleMessage(s), null); 186 } 187 } 188 189 @Override 190 public void debug(final Marker marker, final String s, final Object o) { 191 if (isDebugEnabled(marker)) { 192 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, 193 new ParameterizedMessage(s, o), null); 194 } 195 } 196 197 @Override 198 public void debug(final Marker marker, final String s, final Object o, final Object o1) { 199 if (isDebugEnabled(marker)) { 200 final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1); 201 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable()); 202 } 203 } 204 205 @Override 206 public void debug(final Marker marker, final String s, final Object... objects) { 207 if (isDebugEnabled(marker)) { 208 final ParameterizedMessage msg = new ParameterizedMessage(s, objects); 209 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, msg, msg.getThrowable()); 210 } 211 } 212 213 @Override 214 public void debug(final Marker marker, final String s, final Throwable throwable) { 215 if (isDebugEnabled(marker)) { 216 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.DEBUG, 217 new SimpleMessage(s), throwable); 218 } 219 } 220 221 @Override 222 public void info(final String format) { 223 if (logger.isInfoEnabled()) { 224 logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), null); 225 } 226 } 227 228 @Override 229 public void info(final String format, final Object o) { 230 if (logger.isInfoEnabled()) { 231 logger.log(null, FQCN, Level.INFO, new ParameterizedMessage(format, o), null); 232 } 233 } 234 235 @Override 236 public void info(final String format, final Object arg1, final Object arg2) { 237 if (logger.isInfoEnabled()) { 238 final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2); 239 logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable()); 240 } 241 } 242 243 @Override 244 public void info(final String format, final Object... args) { 245 if (logger.isInfoEnabled()) { 246 final ParameterizedMessage msg = new ParameterizedMessage(format, args); 247 logger.log(null, FQCN, Level.INFO, msg, msg.getThrowable()); 248 } 249 } 250 251 @Override 252 public void info(final String format, final Throwable t) { 253 if (logger.isInfoEnabled()) { 254 logger.log(null, FQCN, Level.INFO, new SimpleMessage(format), t); 255 } 256 } 257 258 @Override 259 public boolean isInfoEnabled() { 260 return logger.isInfoEnabled(); 261 } 262 263 @Override 264 public boolean isInfoEnabled(final Marker marker) { 265 return logger.isInfoEnabled((org.apache.logging.log4j.Marker) marker); 266 } 267 268 @Override 269 public void info(final Marker marker, final String s) { 270 if (isInfoEnabled(marker)) { 271 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, new SimpleMessage(s), null); 272 } 273 } 274 275 @Override 276 public void info(final Marker marker, final String s, final Object o) { 277 if (isInfoEnabled(marker)) { 278 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, 279 new ParameterizedMessage(s, o), null); 280 } 281 } 282 283 @Override 284 public void info(final Marker marker, final String s, final Object o, final Object o1) { 285 if (isInfoEnabled(marker)) { 286 final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1); 287 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable()); 288 } 289 } 290 291 @Override 292 public void info(final Marker marker, final String s, final Object... objects) { 293 if (isInfoEnabled(marker)) { 294 final ParameterizedMessage msg = new ParameterizedMessage(s, objects); 295 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, msg, msg.getThrowable()); 296 } 297 } 298 299 @Override 300 public void info(final Marker marker, final String s, final Throwable throwable) { 301 if (isInfoEnabled(marker)) { 302 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.INFO, 303 new SimpleMessage(s), throwable); 304 } 305 } 306 307 @Override 308 public void warn(final String format) { 309 if (logger.isWarnEnabled()) { 310 logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), null); 311 } 312 } 313 314 @Override 315 public void warn(final String format, final Object o) { 316 if (logger.isWarnEnabled()) { 317 logger.log(null, FQCN, Level.WARN, new ParameterizedMessage(format, o), null); 318 } 319 } 320 321 @Override 322 public void warn(final String format, final Object arg1, final Object arg2) { 323 if (logger.isWarnEnabled()) { 324 final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2); 325 logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable()); 326 } 327 } 328 329 @Override 330 public void warn(final String format, final Object... args) { 331 if (logger.isWarnEnabled()) { 332 final ParameterizedMessage msg = new ParameterizedMessage(format, args); 333 logger.log(null, FQCN, Level.WARN, msg, msg.getThrowable()); 334 } 335 } 336 337 @Override 338 public void warn(final String format, final Throwable t) { 339 if (logger.isWarnEnabled()) { 340 logger.log(null, FQCN, Level.WARN, new SimpleMessage(format), t); 341 } 342 } 343 344 @Override 345 public boolean isWarnEnabled() { 346 return logger.isWarnEnabled(); 347 } 348 349 @Override 350 public boolean isWarnEnabled(final Marker marker) { 351 return logger.isWarnEnabled((org.apache.logging.log4j.Marker) marker); 352 } 353 354 @Override 355 public void warn(final Marker marker, final String s) { 356 if (isWarnEnabled(marker)) { 357 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, new SimpleMessage(s), null); 358 } 359 } 360 361 @Override 362 public void warn(final Marker marker, final String s, final Object o) { 363 if (isWarnEnabled(marker)) { 364 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, 365 new ParameterizedMessage(s, o), null); 366 } 367 } 368 369 @Override 370 public void warn(final Marker marker, final String s, final Object o, final Object o1) { 371 if (isWarnEnabled(marker)) { 372 final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1); 373 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable()); 374 } 375 } 376 377 @Override 378 public void warn(final Marker marker, final String s, final Object... objects) { 379 if (isWarnEnabled(marker)) { 380 final ParameterizedMessage msg = new ParameterizedMessage(s, objects); 381 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, msg, msg.getThrowable()); 382 } 383 } 384 385 @Override 386 public void warn(final Marker marker, final String s, final Throwable throwable) { 387 if (isWarnEnabled(marker)) { 388 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.WARN, 389 new SimpleMessage(s), throwable); 390 } 391 } 392 393 @Override 394 public void error(final String format) { 395 if (logger.isErrorEnabled()) { 396 logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), null); 397 } 398 } 399 400 @Override 401 public void error(final String format, final Object o) { 402 if (logger.isErrorEnabled()) { 403 logger.log(null, FQCN, Level.ERROR, new ParameterizedMessage(format, o), null); 404 } 405 } 406 407 @Override 408 public void error(final String format, final Object arg1, final Object arg2) { 409 if (logger.isErrorEnabled()) { 410 final ParameterizedMessage msg = new ParameterizedMessage(format, arg1, arg2); 411 logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable()); 412 } 413 } 414 415 @Override 416 public void error(final String format, final Object... args) { 417 if (logger.isErrorEnabled()) { 418 final ParameterizedMessage msg = new ParameterizedMessage(format, args); 419 logger.log(null, FQCN, Level.ERROR, msg, msg.getThrowable()); 420 } 421 } 422 423 @Override 424 public void error(final String format, final Throwable t) { 425 if (logger.isErrorEnabled()) { 426 logger.log(null, FQCN, Level.ERROR, new SimpleMessage(format), t); 427 } 428 } 429 430 @Override 431 public boolean isErrorEnabled() { 432 return logger.isErrorEnabled(); 433 } 434 435 @Override 436 public boolean isErrorEnabled(final Marker marker) { 437 return logger.isErrorEnabled((org.apache.logging.log4j.Marker) marker); 438 } 439 440 @Override 441 public void error(final Marker marker, final String s) { 442 if (isErrorEnabled(marker)) { 443 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, new SimpleMessage(s), null); 444 } 445 } 446 447 @Override 448 public void error(final Marker marker, final String s, final Object o) { 449 if (isErrorEnabled(marker)) { 450 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, 451 new ParameterizedMessage(s, o), null); 452 } 453 } 454 455 @Override 456 public void error(final Marker marker, final String s, final Object o, final Object o1) { 457 if (isErrorEnabled(marker)) { 458 final ParameterizedMessage msg = new ParameterizedMessage(s, o, o1); 459 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable()); 460 } 461 } 462 463 @Override 464 public void error(final Marker marker, final String s, final Object... objects) { 465 if (isErrorEnabled(marker)) { 466 final ParameterizedMessage msg = new ParameterizedMessage(s, objects); 467 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, msg, msg.getThrowable()); 468 } 469 } 470 471 @Override 472 public void error(final Marker marker, final String s, final Throwable throwable) { 473 if (isErrorEnabled(marker)) { 474 logger.log((org.apache.logging.log4j.Marker) marker, FQCN, Level.ERROR, 475 new SimpleMessage(s), throwable); 476 } 477 } 478 479 480 @Override 481 public void log(final Marker marker, final String fqcn, final int i, final String s1, final Object[] objects, 482 Throwable throwable) { 483 if (!logger.isEnabled(getLevel(i), (org.apache.logging.log4j.Marker) marker, s1)) { 484 return; 485 } 486 Message msg; 487 if (eventLogger && marker != null && marker.contains(EVENT_MARKER) && converter != null) { 488 msg = converter.convertEvent(s1, objects, throwable); 489 } else if (objects == null) { 490 msg = new SimpleMessage(s1); 491 } else { 492 msg = new ParameterizedMessage(s1, objects, throwable); 493 if (throwable != null) { 494 throwable = msg.getThrowable(); 495 } 496 } 497 logger.log((org.apache.logging.log4j.Marker) marker, fqcn, getLevel(i), msg, throwable); 498 } 499 500 @Override 501 public String getName() { 502 return name; 503 } 504 505 private EventDataConverter createConverter() { 506 try { 507 Class.forName("org.slf4j.ext.EventData"); 508 return new EventDataConverter(); 509 } catch (ClassNotFoundException cnfe) { 510 return null; 511 } 512 } 513 514 private Level getLevel(final int i) { 515 switch (i) { 516 case TRACE_INT : 517 return Level.TRACE; 518 case DEBUG_INT : 519 return Level.DEBUG; 520 case INFO_INT : 521 return Level.INFO; 522 case WARN_INT : 523 return Level.WARN; 524 case ERROR_INT : 525 return Level.ERROR; 526 } 527 return Level.ERROR; 528 } 529}