1 // ======================================================================== 2 // Copyright (c) Webtide LLC 3 // ------------------------------------------------------------------------ 4 // All rights reserved. This program and the accompanying materials 5 // are made available under the terms of the Eclipse Public License v1.0 6 // and Apache License v2.0 which accompanies this distribution. 7 // The Eclipse Public License is available at 8 // http://www.eclipse.org/legal/epl-v10.html 9 // The Apache License v2.0 is available at 10 // http://www.opensource.org/licenses/apache2.0.php 11 // You may elect to redistribute this code under either of these licenses. 12 // ======================================================================== 13 package org.eclipse.jetty.util.log; 14 15 import org.slf4j.Marker; 16 import org.slf4j.helpers.FormattingTuple; 17 import org.slf4j.helpers.MessageFormatter; 18 19 /** 20 * JettyAwareLogger is used to fix a FQCN bug that arises from how Jetty 21 * Log uses an indirect slf4j implementation. 22 * 23 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=276670 24 */ 25 class JettyAwareLogger implements org.slf4j.Logger 26 { 27 private static final int DEBUG = org.slf4j.spi.LocationAwareLogger.DEBUG_INT; 28 private static final int ERROR = org.slf4j.spi.LocationAwareLogger.ERROR_INT; 29 private static final int INFO = org.slf4j.spi.LocationAwareLogger.INFO_INT; 30 private static final int TRACE = org.slf4j.spi.LocationAwareLogger.TRACE_INT; 31 private static final int WARN = org.slf4j.spi.LocationAwareLogger.WARN_INT; 32 33 private static final String FQCN = Slf4jLog.class.getName(); 34 private final org.slf4j.spi.LocationAwareLogger _logger; 35 36 public JettyAwareLogger(org.slf4j.spi.LocationAwareLogger logger) 37 { 38 _logger = logger; 39 } 40 41 /* ------------------------------------------------------------ */ 42 /** 43 * @see org.slf4j.Logger#getName() 44 */ 45 public String getName() 46 { 47 return _logger.getName(); 48 } 49 50 /* ------------------------------------------------------------ */ 51 /** 52 * @see org.slf4j.Logger#isTraceEnabled() 53 */ 54 public boolean isTraceEnabled() 55 { 56 return _logger.isTraceEnabled(); 57 } 58 59 /* ------------------------------------------------------------ */ 60 /** 61 * @see org.slf4j.Logger#trace(java.lang.String) 62 */ 63 public void trace(String msg) 64 { 65 log(null, TRACE, msg, null, null); 66 } 67 68 /* ------------------------------------------------------------ */ 69 /** 70 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object) 71 */ 72 public void trace(String format, Object arg) 73 { 74 log(null, TRACE, format, new Object[]{arg}, null); 75 } 76 77 /* ------------------------------------------------------------ */ 78 /** 79 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object, java.lang.Object) 80 */ 81 public void trace(String format, Object arg1, Object arg2) 82 { 83 log(null, TRACE, format, new Object[]{arg1,arg2}, null); 84 } 85 86 /* ------------------------------------------------------------ */ 87 /** 88 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object[]) 89 */ 90 public void trace(String format, Object[] argArray) 91 { 92 log(null, TRACE, format, argArray, null); 93 } 94 95 /* ------------------------------------------------------------ */ 96 /** 97 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Throwable) 98 */ 99 public void trace(String msg, Throwable t) 100 { 101 log(null, TRACE, msg, null, t); 102 } 103 104 /* ------------------------------------------------------------ */ 105 /** 106 * @see org.slf4j.Logger#isTraceEnabled(org.slf4j.Marker) 107 */ 108 public boolean isTraceEnabled(Marker marker) 109 { 110 return _logger.isTraceEnabled(marker); 111 } 112 113 /* ------------------------------------------------------------ */ 114 /** 115 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String) 116 */ 117 public void trace(Marker marker, String msg) 118 { 119 log(marker, TRACE, msg, null, null); 120 } 121 122 /* ------------------------------------------------------------ */ 123 /** 124 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object) 125 */ 126 public void trace(Marker marker, String format, Object arg) 127 { 128 log(marker, TRACE, format, new Object[]{arg}, null); 129 } 130 131 /* ------------------------------------------------------------ */ 132 /** 133 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object) 134 */ 135 public void trace(Marker marker, String format, Object arg1, Object arg2) 136 { 137 log(marker, TRACE, format, new Object[]{arg1,arg2}, null); 138 } 139 140 /* ------------------------------------------------------------ */ 141 /** 142 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object[]) 143 */ 144 public void trace(Marker marker, String format, Object[] argArray) 145 { 146 log(marker, TRACE, format, argArray, null); 147 } 148 149 /* ------------------------------------------------------------ */ 150 /** 151 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Throwable) 152 */ 153 public void trace(Marker marker, String msg, Throwable t) 154 { 155 log(marker, TRACE, msg, null, t); 156 } 157 158 /* ------------------------------------------------------------ */ 159 /** 160 * @see org.slf4j.Logger#isDebugEnabled() 161 */ 162 public boolean isDebugEnabled() 163 { 164 return _logger.isDebugEnabled(); 165 } 166 167 /* ------------------------------------------------------------ */ 168 /** 169 * @see org.slf4j.Logger#debug(java.lang.String) 170 */ 171 public void debug(String msg) 172 { 173 log(null, DEBUG, msg, null, null); 174 } 175 176 /* ------------------------------------------------------------ */ 177 /** 178 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object) 179 */ 180 public void debug(String format, Object arg) 181 { 182 log(null, DEBUG, format, new Object[]{arg}, null); 183 } 184 185 /* ------------------------------------------------------------ */ 186 /** 187 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object, java.lang.Object) 188 */ 189 public void debug(String format, Object arg1, Object arg2) 190 { 191 log(null, DEBUG, format, new Object[]{arg1,arg2}, null); 192 } 193 194 /* ------------------------------------------------------------ */ 195 /** 196 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object[]) 197 */ 198 public void debug(String format, Object[] argArray) 199 { 200 log(null, DEBUG, format, argArray, null); 201 } 202 203 /* ------------------------------------------------------------ */ 204 /** 205 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Throwable) 206 */ 207 public void debug(String msg, Throwable t) 208 { 209 log(null, DEBUG, msg, null, t); 210 } 211 212 /* ------------------------------------------------------------ */ 213 /** 214 * @see org.slf4j.Logger#isDebugEnabled(org.slf4j.Marker) 215 */ 216 public boolean isDebugEnabled(Marker marker) 217 { 218 return _logger.isDebugEnabled(marker); 219 } 220 221 /* ------------------------------------------------------------ */ 222 /** 223 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String) 224 */ 225 public void debug(Marker marker, String msg) 226 { 227 log(marker, DEBUG, msg, null, null); 228 } 229 230 /* ------------------------------------------------------------ */ 231 /** 232 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object) 233 */ 234 public void debug(Marker marker, String format, Object arg) 235 { 236 log(marker, DEBUG, format, new Object[]{arg}, null); 237 } 238 239 /* ------------------------------------------------------------ */ 240 /** 241 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object) 242 */ 243 public void debug(Marker marker, String format, Object arg1, Object arg2) 244 { 245 log(marker, DEBUG, format, new Object[]{arg1,arg2}, null); 246 } 247 248 /* ------------------------------------------------------------ */ 249 /** 250 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object[]) 251 */ 252 public void debug(Marker marker, String format, Object[] argArray) 253 { 254 log(marker, DEBUG, format, argArray, null); 255 } 256 257 /* ------------------------------------------------------------ */ 258 /** 259 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Throwable) 260 */ 261 public void debug(Marker marker, String msg, Throwable t) 262 { 263 log(marker, DEBUG, msg, null, t); 264 } 265 266 /* ------------------------------------------------------------ */ 267 /** 268 * @see org.slf4j.Logger#isInfoEnabled() 269 */ 270 public boolean isInfoEnabled() 271 { 272 return _logger.isInfoEnabled(); 273 } 274 275 /* ------------------------------------------------------------ */ 276 /** 277 * @see org.slf4j.Logger#info(java.lang.String) 278 */ 279 public void info(String msg) 280 { 281 log(null, INFO, msg, null, null); 282 } 283 284 /* ------------------------------------------------------------ */ 285 /** 286 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object) 287 */ 288 public void info(String format, Object arg) 289 { 290 log(null, INFO, format, new Object[]{arg}, null); 291 } 292 293 /* ------------------------------------------------------------ */ 294 /** 295 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object, java.lang.Object) 296 */ 297 public void info(String format, Object arg1, Object arg2) 298 { 299 log(null, INFO, format, new Object[]{arg1,arg2}, null); 300 } 301 302 /* ------------------------------------------------------------ */ 303 /** 304 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object[]) 305 */ 306 public void info(String format, Object[] argArray) 307 { 308 log(null, INFO, format, argArray, null); 309 } 310 311 /* ------------------------------------------------------------ */ 312 /** 313 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Throwable) 314 */ 315 public void info(String msg, Throwable t) 316 { 317 log(null, INFO, msg, null, t); 318 } 319 320 /* ------------------------------------------------------------ */ 321 /** 322 * @see org.slf4j.Logger#isInfoEnabled(org.slf4j.Marker) 323 */ 324 public boolean isInfoEnabled(Marker marker) 325 { 326 return _logger.isInfoEnabled(marker); 327 } 328 329 /* ------------------------------------------------------------ */ 330 /** 331 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String) 332 */ 333 public void info(Marker marker, String msg) 334 { 335 log(marker, INFO, msg, null, null); 336 } 337 338 /* ------------------------------------------------------------ */ 339 /** 340 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object) 341 */ 342 public void info(Marker marker, String format, Object arg) 343 { 344 log(marker, INFO, format, new Object[]{arg}, null); 345 } 346 347 /* ------------------------------------------------------------ */ 348 /** 349 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object) 350 */ 351 public void info(Marker marker, String format, Object arg1, Object arg2) 352 { 353 log(marker, INFO, format, new Object[]{arg1,arg2}, null); 354 } 355 356 /* ------------------------------------------------------------ */ 357 /** 358 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object[]) 359 */ 360 public void info(Marker marker, String format, Object[] argArray) 361 { 362 log(marker, INFO, format, argArray, null); 363 } 364 365 /* ------------------------------------------------------------ */ 366 /** 367 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Throwable) 368 */ 369 public void info(Marker marker, String msg, Throwable t) 370 { 371 log(marker, INFO, msg, null, t); 372 } 373 374 /* ------------------------------------------------------------ */ 375 /** 376 * @see org.slf4j.Logger#isWarnEnabled() 377 */ 378 public boolean isWarnEnabled() 379 { 380 return _logger.isWarnEnabled(); 381 } 382 383 /* ------------------------------------------------------------ */ 384 /** 385 * @see org.slf4j.Logger#warn(java.lang.String) 386 */ 387 public void warn(String msg) 388 { 389 log(null, WARN, msg, null, null); 390 } 391 392 /* ------------------------------------------------------------ */ 393 /** 394 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object) 395 */ 396 public void warn(String format, Object arg) 397 { 398 log(null, WARN, format, new Object[]{arg}, null); 399 } 400 401 /* ------------------------------------------------------------ */ 402 /** 403 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object[]) 404 */ 405 public void warn(String format, Object[] argArray) 406 { 407 log(null, WARN, format, argArray, null); 408 } 409 410 /* ------------------------------------------------------------ */ 411 /** 412 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object, java.lang.Object) 413 */ 414 public void warn(String format, Object arg1, Object arg2) 415 { 416 log(null, WARN, format, new Object[]{arg1,arg2}, null); 417 } 418 419 /* ------------------------------------------------------------ */ 420 /** 421 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Throwable) 422 */ 423 public void warn(String msg, Throwable t) 424 { 425 log(null, WARN, msg, null, t); 426 } 427 428 /* ------------------------------------------------------------ */ 429 /** 430 * @see org.slf4j.Logger#isWarnEnabled(org.slf4j.Marker) 431 */ 432 public boolean isWarnEnabled(Marker marker) 433 { 434 return _logger.isWarnEnabled(marker); 435 } 436 437 /* ------------------------------------------------------------ */ 438 /** 439 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String) 440 */ 441 public void warn(Marker marker, String msg) 442 { 443 log(marker, WARN, msg, null, null); 444 } 445 446 /* ------------------------------------------------------------ */ 447 /** 448 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object) 449 */ 450 public void warn(Marker marker, String format, Object arg) 451 { 452 log(marker, WARN, format, new Object[]{arg}, null); 453 } 454 455 /* ------------------------------------------------------------ */ 456 /** 457 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object) 458 */ 459 public void warn(Marker marker, String format, Object arg1, Object arg2) 460 { 461 log(marker, WARN, format, new Object[]{arg1,arg2}, null); 462 } 463 464 /* ------------------------------------------------------------ */ 465 /** 466 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object[]) 467 */ 468 public void warn(Marker marker, String format, Object[] argArray) 469 { 470 log(marker, WARN, format, argArray, null); 471 } 472 473 /* ------------------------------------------------------------ */ 474 /** 475 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Throwable) 476 */ 477 public void warn(Marker marker, String msg, Throwable t) 478 { 479 log(marker, WARN, msg, null, t); 480 } 481 482 /* ------------------------------------------------------------ */ 483 /** 484 * @see org.slf4j.Logger#isErrorEnabled() 485 */ 486 public boolean isErrorEnabled() 487 { 488 return _logger.isErrorEnabled(); 489 } 490 491 /* ------------------------------------------------------------ */ 492 /** 493 * @see org.slf4j.Logger#error(java.lang.String) 494 */ 495 public void error(String msg) 496 { 497 log(null, ERROR, msg, null, null); 498 } 499 500 /* ------------------------------------------------------------ */ 501 /** 502 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object) 503 */ 504 public void error(String format, Object arg) 505 { 506 log(null, ERROR, format, new Object[]{arg}, null); 507 } 508 509 /* ------------------------------------------------------------ */ 510 /** 511 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object, java.lang.Object) 512 */ 513 public void error(String format, Object arg1, Object arg2) 514 { 515 log(null, ERROR, format, new Object[]{arg1,arg2}, null); 516 } 517 518 /* ------------------------------------------------------------ */ 519 /** 520 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object[]) 521 */ 522 public void error(String format, Object[] argArray) 523 { 524 log(null, ERROR, format, argArray, null); 525 } 526 527 /* ------------------------------------------------------------ */ 528 /** 529 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Throwable) 530 */ 531 public void error(String msg, Throwable t) 532 { 533 log(null, ERROR, msg, null, t); 534 } 535 536 /* ------------------------------------------------------------ */ 537 /** 538 * @see org.slf4j.Logger#isErrorEnabled(org.slf4j.Marker) 539 */ 540 public boolean isErrorEnabled(Marker marker) 541 { 542 return _logger.isErrorEnabled(marker); 543 } 544 545 /* ------------------------------------------------------------ */ 546 /** 547 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String) 548 */ 549 public void error(Marker marker, String msg) 550 { 551 log(marker, ERROR, msg, null, null); 552 } 553 554 /* ------------------------------------------------------------ */ 555 /** 556 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object) 557 */ 558 public void error(Marker marker, String format, Object arg) 559 { 560 log(marker, ERROR, format, new Object[]{arg}, null); 561 } 562 563 /* ------------------------------------------------------------ */ 564 /** 565 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object) 566 */ 567 public void error(Marker marker, String format, Object arg1, Object arg2) 568 { 569 log(marker, ERROR, format, new Object[]{arg1,arg2}, null); 570 } 571 572 /* ------------------------------------------------------------ */ 573 /** 574 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object[]) 575 */ 576 public void error(Marker marker, String format, Object[] argArray) 577 { 578 log(marker, ERROR, format, argArray, null); 579 } 580 581 /* ------------------------------------------------------------ */ 582 /** 583 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Throwable) 584 */ 585 public void error(Marker marker, String msg, Throwable t) 586 { 587 log(marker, ERROR, msg, null, t); 588 } 589 590 @Override 591 public String toString() 592 { 593 return _logger.toString(); 594 } 595 596 private void log(Marker marker, int level, String msg, Object[] argArray, Throwable t) 597 { 598 if (argArray == null) 599 { 600 // Simple SLF4J Message (no args) 601 _logger.log(marker,FQCN,level,msg,null,t); 602 } 603 else 604 { 605 // Don't assume downstream handles argArray properly. 606 // Do it the SLF4J way here to eliminate that as a bug. 607 FormattingTuple ft = MessageFormatter.arrayFormat(msg,argArray); 608 _logger.log(marker,FQCN,level,ft.getMessage(),null,t); 609 } 610 } 611 }