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