1 package uk.org.lidalia.slf4jtest; 2 3 import java.util.Collections; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.Set; 8 import java.util.concurrent.atomic.AtomicReference; 9 10 import org.apache.commons.lang3.RandomStringUtils; 11 import org.junit.After; 12 import org.junit.Before; 13 import org.junit.Rule; 14 import org.junit.Test; 15 import org.slf4j.MDC; 16 import org.slf4j.Marker; 17 18 import com.google.common.base.Function; 19 import com.google.common.collect.ImmutableMap; 20 import com.google.common.collect.ImmutableSet; 21 import com.google.common.collect.Lists; 22 23 import uk.org.lidalia.slf4jext.Level; 24 import uk.org.lidalia.slf4jext.Logger; 25 import uk.org.lidalia.test.SystemOutputRule; 26 27 import static com.google.common.collect.Sets.difference; 28 import static com.google.common.collect.Sets.newHashSet; 29 import static java.util.Arrays.asList; 30 import static java.util.Collections.EMPTY_LIST; 31 import static org.hamcrest.CoreMatchers.containsString; 32 import static org.hamcrest.Matchers.is; 33 import static org.hamcrest.Matchers.isEmptyString; 34 import static org.junit.Assert.assertEquals; 35 import static org.junit.Assert.assertFalse; 36 import static org.junit.Assert.assertThat; 37 import static org.junit.Assert.assertTrue; 38 import static org.mockito.Mockito.mock; 39 import static uk.org.lidalia.slf4jext.Level.DEBUG; 40 import static uk.org.lidalia.slf4jext.Level.ERROR; 41 import static uk.org.lidalia.slf4jext.Level.INFO; 42 import static uk.org.lidalia.slf4jext.Level.TRACE; 43 import static uk.org.lidalia.slf4jext.Level.WARN; 44 import static uk.org.lidalia.slf4jext.Level.enablableValueSet; 45 import static uk.org.lidalia.slf4jtest.LoggingEvent.debug; 46 import static uk.org.lidalia.slf4jtest.LoggingEvent.error; 47 import static uk.org.lidalia.slf4jtest.LoggingEvent.info; 48 import static uk.org.lidalia.slf4jtest.LoggingEvent.trace; 49 import static uk.org.lidalia.slf4jtest.LoggingEvent.warn; 50 51 public class TestLoggerTests { 52 53 private static final String LOGGER_NAME = "uk.org"; 54 private final TestLogger testLogger = new TestLogger(LOGGER_NAME, TestLoggerFactory.getInstance()); 55 private final Marker marker = mock(Marker.class); 56 private final String message = "message {} {} {}"; 57 private final Object arg1 = "arg1"; 58 private final Object arg2 = "arg2"; 59 private final Object[] args = new Object[]{arg1, arg2, "arg3"}; 60 private final Throwable throwable = new Throwable(); 61 private final Object[] argsWithThrowable = new Object[]{arg1, arg2, "arg3", throwable}; 62 63 private final Map<String, String> mdcValues = new HashMap<>(); 64 65 @Rule public SystemOutputRule systemOutputRule = new SystemOutputRule(); 66 67 @Before 68 public void setUp() { 69 mdcValues.put("key1", "value1"); 70 mdcValues.put("key2", "value2"); 71 MDC.setContextMap(mdcValues); 72 } 73 74 @After 75 public void tearDown() { 76 MDC.clear(); 77 TestLoggerFactory.getInstance().setPrintLevel(Level.OFF); 78 } 79 80 @Test 81 public void name() { 82 String name = RandomStringUtils.random(10); 83 TestLogger logger = new TestLogger(name, TestLoggerFactory.getInstance()); 84 assertEquals(name, logger.getName()); 85 } 86 87 @Test 88 public void clearRemovesEvents() { 89 testLogger.debug("message1"); 90 testLogger.debug("message2"); 91 assertEquals(asList(debug(mdcValues, "message1"), debug(mdcValues, "message2")), testLogger.getLoggingEvents()); 92 testLogger.clear(); 93 assertEquals(Collections.emptyList(), testLogger.getLoggingEvents()); 94 } 95 96 @Test 97 public void clearResetsLevel() { 98 testLogger.setEnabledLevels(); 99 testLogger.clear(); 100 assertEquals(newHashSet(TRACE, DEBUG, INFO, WARN, ERROR), testLogger.getEnabledLevels()); 101 } 102 103 @Test 104 public void traceEnabled() { 105 assertEnabledReturnsCorrectly(TRACE); 106 } 107 108 @Test 109 public void traceMessage() { 110 testLogger.trace(message); 111 112 assertEquals(asList(trace(mdcValues, message)), testLogger.getLoggingEvents()); 113 } 114 115 @Test 116 public void traceMessageOneArg() { 117 testLogger.trace(message, arg1); 118 119 assertEquals(asList(trace(mdcValues, message, arg1)), testLogger.getLoggingEvents()); 120 } 121 122 @Test 123 public void traceMessageTwoArgs() { 124 testLogger.trace(message, arg1, arg2); 125 126 assertEquals(asList(trace(mdcValues, message, arg1, arg2)), testLogger.getLoggingEvents()); 127 } 128 129 @Test 130 public void traceMessageManyArgs() { 131 testLogger.trace(message, args); 132 133 assertEquals(asList(trace(mdcValues, message, args)), testLogger.getLoggingEvents()); 134 } 135 136 @Test 137 public void traceMessageManyArgsWithThrowable() { 138 testLogger.trace(message, argsWithThrowable); 139 140 assertEquals(asList(trace(mdcValues, throwable, message, args)), testLogger.getLoggingEvents()); 141 } 142 143 @Test 144 public void traceMessageThrowable() { 145 testLogger.trace(message, throwable); 146 147 assertEquals(asList(trace(mdcValues, throwable, message)), testLogger.getLoggingEvents()); 148 } 149 150 @Test 151 public void traceEnabledMarker() { 152 assertEnabledReturnsCorrectly(TRACE, marker); 153 } 154 155 @Test 156 public void traceMarkerMessage() { 157 testLogger.trace(marker, message); 158 159 assertEquals(asList(trace(mdcValues, marker, message)), testLogger.getLoggingEvents()); 160 } 161 162 @Test 163 public void traceMarkerMessageOneArg() { 164 testLogger.trace(marker, message, arg1); 165 166 assertEquals(asList(trace(mdcValues, marker, message, arg1)), testLogger.getLoggingEvents()); 167 } 168 169 @Test 170 public void traceMarkerMessageTwoArgs() { 171 testLogger.trace(marker, message, arg1, arg2); 172 173 assertEquals(asList(trace(mdcValues, marker, message, arg1, arg2)), testLogger.getLoggingEvents()); 174 } 175 176 @Test 177 public void traceMarkerMessageManyArgs() { 178 testLogger.trace(marker, message, args); 179 180 assertEquals(asList(trace(mdcValues, marker, message, args)), testLogger.getLoggingEvents()); 181 } 182 183 @Test 184 public void traceMarkerMessageManyArgsWithThrowable() { 185 testLogger.trace(marker, message, argsWithThrowable); 186 187 assertEquals(asList(trace(mdcValues, marker, throwable, message, args)), testLogger.getLoggingEvents()); 188 } 189 190 @Test 191 public void traceMarkerMessageThrowable() { 192 testLogger.trace(marker, message, throwable); 193 194 assertEquals(asList(trace(mdcValues, marker, throwable, message)), testLogger.getLoggingEvents()); 195 } 196 197 @Test 198 public void debugEnabled() { 199 assertEnabledReturnsCorrectly(DEBUG); 200 } 201 202 @Test 203 public void debugMessage() { 204 testLogger.debug(message); 205 206 assertEquals(asList(debug(mdcValues, message)), testLogger.getLoggingEvents()); 207 } 208 209 @Test 210 public void debugMessageOneArg() { 211 testLogger.debug(message, arg1); 212 213 assertEquals(asList(debug(mdcValues, message, arg1)), testLogger.getLoggingEvents()); 214 } 215 216 @Test 217 public void debugMessageTwoArgs() { 218 testLogger.debug(message, arg1, arg2); 219 220 assertEquals(asList(debug(mdcValues, message, arg1, arg2)), testLogger.getLoggingEvents()); 221 } 222 223 @Test 224 public void debugMessageManyArgs() { 225 testLogger.debug(message, args); 226 227 assertEquals(asList(debug(mdcValues, message, args)), testLogger.getLoggingEvents()); 228 } 229 230 @Test 231 public void debugMessageManyArgsWithThrowable() { 232 testLogger.debug(message, argsWithThrowable); 233 234 assertEquals(asList(debug(mdcValues, throwable, message, args)), testLogger.getLoggingEvents()); 235 } 236 237 @Test 238 public void debugMessageThrowable() { 239 testLogger.debug(message, throwable); 240 241 assertEquals(asList(debug(mdcValues, throwable, message)), testLogger.getLoggingEvents()); 242 } 243 244 @Test 245 public void debugEnabledMarker() { 246 assertEnabledReturnsCorrectly(DEBUG, marker); 247 } 248 249 @Test 250 public void debugMarkerMessage() { 251 testLogger.debug(marker, message); 252 253 assertEquals(asList(debug(mdcValues, marker, message)), testLogger.getLoggingEvents()); 254 } 255 256 @Test 257 public void debugMarkerMessageOneArg() { 258 testLogger.debug(marker, message, arg1); 259 260 assertEquals(asList(debug(mdcValues, marker, message, arg1)), testLogger.getLoggingEvents()); 261 } 262 263 @Test 264 public void debugMarkerMessageTwoArgs() { 265 testLogger.debug(marker, message, arg1, arg2); 266 267 assertEquals(asList(debug(mdcValues, marker, message, arg1, arg2)), testLogger.getLoggingEvents()); 268 } 269 270 @Test 271 public void debugMarkerMessageManyArgs() { 272 testLogger.debug(marker, message, args); 273 274 assertEquals(asList(debug(mdcValues, marker, message, args)), testLogger.getLoggingEvents()); 275 } 276 277 @Test 278 public void debugMarkerMessageManyArgsWithThrowable() { 279 testLogger.debug(marker, message, argsWithThrowable); 280 281 assertEquals(asList(debug(mdcValues, marker, throwable, message, args)), testLogger.getLoggingEvents()); 282 } 283 284 @Test 285 public void debugMarkerMessageThrowable() { 286 testLogger.debug(marker, message, throwable); 287 288 assertEquals(asList(debug(mdcValues, marker, throwable, message)), testLogger.getLoggingEvents()); 289 } 290 291 @Test 292 public void infoEnabled() { 293 assertEnabledReturnsCorrectly(INFO); 294 } 295 296 @Test 297 public void infoMessage() { 298 testLogger.info(message); 299 300 assertEquals(asList(info(mdcValues, message)), testLogger.getLoggingEvents()); 301 } 302 303 @Test 304 public void infoMessageOneArg() { 305 testLogger.info(message, arg1); 306 307 assertEquals(asList(info(mdcValues, message, arg1)), testLogger.getLoggingEvents()); 308 } 309 310 @Test 311 public void infoMessageTwoArgs() { 312 testLogger.info(message, arg1, arg2); 313 314 assertEquals(asList(info(mdcValues, message, arg1, arg2)), testLogger.getLoggingEvents()); 315 } 316 317 @Test 318 public void infoMessageManyArgs() { 319 testLogger.info(message, args); 320 321 assertEquals(asList(info(mdcValues, message, args)), testLogger.getLoggingEvents()); 322 } 323 324 @Test 325 public void infoMessageManyArgsWithThrowable() { 326 testLogger.info(message, argsWithThrowable); 327 328 assertEquals(asList(info(mdcValues, throwable, message, args)), testLogger.getLoggingEvents()); 329 } 330 331 @Test 332 public void infoMessageThrowable() { 333 testLogger.info(message, throwable); 334 335 assertEquals(asList(info(mdcValues, throwable, message)), testLogger.getLoggingEvents()); 336 } 337 338 @Test 339 public void infoEnabledMarker() { 340 assertEnabledReturnsCorrectly(INFO, marker); 341 } 342 343 @Test 344 public void infoMarkerMessage() { 345 testLogger.info(marker, message); 346 347 assertEquals(asList(info(mdcValues, marker, message)), testLogger.getLoggingEvents()); 348 } 349 350 @Test 351 public void infoMarkerMessageOneArg() { 352 testLogger.info(marker, message, arg1); 353 354 assertEquals(asList(info(mdcValues, marker, message, arg1)), testLogger.getLoggingEvents()); 355 } 356 357 @Test 358 public void infoMarkerMessageTwoArgs() { 359 testLogger.info(marker, message, arg1, arg2); 360 361 assertEquals(asList(info(mdcValues, marker, message, arg1, arg2)), testLogger.getLoggingEvents()); 362 } 363 364 @Test 365 public void infoMarkerMessageManyArgs() { 366 testLogger.info(marker, message, args); 367 368 assertEquals(asList(info(mdcValues, marker, message, args)), testLogger.getLoggingEvents()); 369 } 370 371 @Test 372 public void infoMarkerMessageManyArgsWithThrowable() { 373 testLogger.info(marker, message, argsWithThrowable); 374 375 assertEquals(asList(info(mdcValues, marker, throwable, message, args)), testLogger.getLoggingEvents()); 376 } 377 378 @Test 379 public void infoMarkerMessageThrowable() { 380 testLogger.info(marker, message, throwable); 381 382 assertEquals(asList(info(mdcValues, marker, throwable, message)), testLogger.getLoggingEvents()); 383 } 384 385 @Test 386 public void warnEnabled() { 387 assertEnabledReturnsCorrectly(WARN); 388 } 389 390 @Test 391 public void warnMessage() { 392 testLogger.warn(message); 393 394 assertEquals(asList(warn(mdcValues, message)), testLogger.getLoggingEvents()); 395 } 396 397 @Test 398 public void warnMessageOneArg() { 399 testLogger.warn(message, arg1); 400 401 assertEquals(asList(warn(mdcValues, message, arg1)), testLogger.getLoggingEvents()); 402 } 403 404 @Test 405 public void warnMessageTwoArgs() { 406 testLogger.warn(message, arg1, arg2); 407 408 assertEquals(asList(warn(mdcValues, message, arg1, arg2)), testLogger.getLoggingEvents()); 409 } 410 411 @Test 412 public void warnMessageManyArgs() { 413 testLogger.warn(message, args); 414 415 assertEquals(asList(warn(mdcValues, message, args)), testLogger.getLoggingEvents()); 416 } 417 418 @Test 419 public void warnMessageManyArgsWithThrowable() { 420 testLogger.warn(message, argsWithThrowable); 421 422 assertEquals(asList(warn(mdcValues, throwable, message, args)), testLogger.getLoggingEvents()); 423 } 424 425 @Test 426 public void warnMessageThrowable() { 427 testLogger.warn(message, throwable); 428 429 assertEquals(asList(warn(mdcValues, throwable, message)), testLogger.getLoggingEvents()); 430 } 431 432 @Test 433 public void warnEnabledMarker() { 434 assertEnabledReturnsCorrectly(WARN, marker); 435 } 436 437 @Test 438 public void warnMarkerMessage() { 439 testLogger.warn(marker, message); 440 441 assertEquals(asList(warn(mdcValues, marker, message)), testLogger.getLoggingEvents()); 442 } 443 444 @Test 445 public void warnMarkerMessageOneArg() { 446 testLogger.warn(marker, message, arg1); 447 448 assertEquals(asList(warn(mdcValues, marker, message, arg1)), testLogger.getLoggingEvents()); 449 } 450 451 @Test 452 public void warnMarkerMessageTwoArgs() { 453 testLogger.warn(marker, message, arg1, arg2); 454 455 assertEquals(asList(warn(mdcValues, marker, message, arg1, arg2)), testLogger.getLoggingEvents()); 456 } 457 458 @Test 459 public void warnMarkerMessageManyArgs() { 460 testLogger.warn(marker, message, args); 461 462 assertEquals(asList(warn(mdcValues, marker, message, args)), testLogger.getLoggingEvents()); 463 } 464 465 @Test 466 public void warnMarkerMessageManyArgsWithThrowable() { 467 testLogger.warn(marker, message, argsWithThrowable); 468 469 assertEquals(asList(warn(mdcValues, marker, throwable, message, args)), testLogger.getLoggingEvents()); 470 } 471 472 @Test 473 public void warnMarkerMessageThrowable() { 474 testLogger.warn(marker, message, throwable); 475 476 assertEquals(asList(warn(mdcValues, marker, throwable, message)), testLogger.getLoggingEvents()); 477 } 478 479 @Test 480 public void errorEnabled() { 481 assertEnabledReturnsCorrectly(ERROR); 482 } 483 484 @Test 485 public void errorMessage() { 486 testLogger.error(message); 487 488 assertEquals(asList(error(mdcValues, message)), testLogger.getLoggingEvents()); 489 } 490 491 @Test 492 public void errorMessageOneArg() { 493 testLogger.error(message, arg1); 494 495 assertEquals(asList(error(mdcValues, message, arg1)), testLogger.getLoggingEvents()); 496 } 497 498 @Test 499 public void errorMessageTwoArgs() { 500 testLogger.error(message, arg1, arg2); 501 502 assertEquals(asList(error(mdcValues, message, arg1, arg2)), testLogger.getLoggingEvents()); 503 } 504 505 @Test 506 public void errorMessageManyArgs() { 507 testLogger.error(message, args); 508 509 assertEquals(asList(error(mdcValues, message, args)), testLogger.getLoggingEvents()); 510 } 511 512 @Test 513 public void errorMessageManyArgsWithThrowable() { 514 testLogger.error(message, argsWithThrowable); 515 516 assertEquals(asList(error(mdcValues, throwable, message, args)), testLogger.getLoggingEvents()); 517 } 518 519 @Test 520 public void errorMessageThrowable() { 521 testLogger.error(message, throwable); 522 523 assertEquals(asList(error(mdcValues, throwable, message)), testLogger.getLoggingEvents()); 524 } 525 526 @Test 527 public void errorEnabledMarker() { 528 assertEnabledReturnsCorrectly(ERROR, marker); 529 } 530 531 @Test 532 public void errorMarkerMessage() { 533 testLogger.error(marker, message); 534 535 assertEquals(asList(error(mdcValues, marker, message)), testLogger.getLoggingEvents()); 536 } 537 538 @Test 539 public void errorMarkerMessageOneArg() { 540 testLogger.error(marker, message, arg1); 541 542 assertEquals(asList(error(mdcValues, marker, message, arg1)), testLogger.getLoggingEvents()); 543 } 544 545 @Test 546 public void errorMarkerMessageTwoArgs() { 547 testLogger.error(marker, message, arg1, arg2); 548 549 assertEquals(asList(error(mdcValues, marker, message, arg1, arg2)), testLogger.getLoggingEvents()); 550 } 551 552 @Test 553 public void errorMarkerMessageManyArgs() { 554 testLogger.error(marker, message, args); 555 556 assertEquals(asList(error(mdcValues, marker, message, args)), testLogger.getLoggingEvents()); 557 } 558 559 @Test 560 public void errorMarkerMessageManyArgsWithThrowable() { 561 testLogger.error(marker, message, argsWithThrowable); 562 563 assertEquals(asList(error(mdcValues, marker, throwable, message, args)), testLogger.getLoggingEvents()); 564 } 565 566 @Test 567 public void errorMarkerMessageThrowable() { 568 testLogger.error(marker, message, throwable); 569 570 assertEquals(asList(error(mdcValues, marker, throwable, message)), testLogger.getLoggingEvents()); 571 } 572 573 @Test 574 public void loggerSetToOff() { 575 logsIfEnabled(); 576 } 577 578 @Test 579 public void loggerSetToError() { 580 logsIfEnabled(ERROR); 581 } 582 583 @Test 584 public void loggerSetToWarn() { 585 logsIfEnabled(ERROR, WARN); 586 } 587 588 @Test 589 public void loggerSetToInfo() { 590 logsIfEnabled(ERROR, WARN, INFO); 591 } 592 593 @Test 594 public void loggerSetToDebug() { 595 logsIfEnabled(ERROR, WARN, INFO, DEBUG); 596 } 597 598 @Test 599 public void loggerSetToTrace() { 600 logsIfEnabled(ERROR, WARN, INFO, DEBUG, TRACE); 601 } 602 603 private void logsIfEnabled(Level... shouldLog) { 604 testLogger.setEnabledLevels(shouldLog); 605 testLogger.error(message); 606 testLogger.warn(message); 607 testLogger.info(message); 608 testLogger.debug(message); 609 testLogger.trace(message); 610 611 List<LoggingEvent> expectedEvents = Lists.transform(asList(shouldLog), new Function<Level, LoggingEvent>() { 612 @Override 613 public LoggingEvent apply(Level level) { 614 return new LoggingEvent(level, mdcValues, message); 615 } 616 }); 617 618 assertEquals(expectedEvents, testLogger.getLoggingEvents()); 619 testLogger.clear(); 620 } 621 622 @Test 623 public void getLoggingEventsReturnsCopyNotView() { 624 testLogger.debug(message); 625 List<LoggingEvent> loggingEvents = testLogger.getLoggingEvents(); 626 testLogger.info(message); 627 628 assertEquals(asList(debug(mdcValues, message)), loggingEvents); 629 } 630 631 @Test(expected = UnsupportedOperationException.class) 632 public void getLoggingEventsReturnsUnmodifiableList() { 633 List<LoggingEvent> loggingEvents = testLogger.getLoggingEvents(); 634 loggingEvents.add(debug("hello")); 635 } 636 637 @Test 638 public void getLoggingEventsOnlyReturnsEventsLoggedInThisThread() throws InterruptedException { 639 Thread t = new Thread(new Runnable() { 640 @Override 641 public void run() { 642 testLogger.info(message); 643 } 644 }); 645 t.start(); 646 t.join(); 647 assertEquals(EMPTY_LIST, testLogger.getLoggingEvents()); 648 } 649 650 @Test 651 public void getAllLoggingEventsReturnsEventsLoggedInAllThreads() throws InterruptedException { 652 Thread t = new Thread(new Runnable() { 653 @Override 654 public void run() { 655 testLogger.info(message); 656 } 657 }); 658 t.start(); 659 t.join(); 660 testLogger.info(message); 661 assertEquals(asList(info(message), info(mdcValues, message)), testLogger.getAllLoggingEvents()); 662 } 663 664 @Test 665 public void clearOnlyClearsEventsLoggedInThisThread() throws InterruptedException { 666 Thread t = new Thread(new Runnable() { 667 @Override 668 public void run() { 669 testLogger.info(message); 670 } 671 }); 672 t.start(); 673 t.join(); 674 testLogger.clear(); 675 assertEquals(asList(info(message)), testLogger.getAllLoggingEvents()); 676 } 677 678 @Test 679 public void clearAllClearsEventsLoggedInAllThreads() throws InterruptedException { 680 testLogger.info(message); 681 Thread t = new Thread(new Runnable() { 682 @Override 683 public void run() { 684 testLogger.info(message); 685 testLogger.clearAll(); 686 } 687 }); 688 t.start(); 689 t.join(); 690 assertEquals(EMPTY_LIST, testLogger.getAllLoggingEvents()); 691 assertEquals(EMPTY_LIST, testLogger.getLoggingEvents()); 692 } 693 694 @Test 695 public void setEnabledLevelOnlyChangesLevelForCurrentThread() throws Exception { 696 final AtomicReference<ImmutableSet<Level>> inThreadEnabledLevels = new AtomicReference<ImmutableSet<Level>>(); 697 Thread t = new Thread(new Runnable() { 698 @Override 699 public void run() { 700 testLogger.setEnabledLevels(Level.WARN, Level.ERROR); 701 inThreadEnabledLevels.set(testLogger.getEnabledLevels()); 702 } 703 }); 704 t.start(); 705 t.join(); 706 assertEquals(ImmutableSet.of(Level.WARN, Level.ERROR), inThreadEnabledLevels.get()); 707 assertEquals(Level.enablableValueSet(), testLogger.getEnabledLevels()); 708 } 709 710 @Test 711 public void clearOnlyChangesLevelForCurrentThread() throws Exception { 712 testLogger.setEnabledLevels(Level.WARN, Level.ERROR); 713 Thread t = new Thread(new Runnable() { 714 @Override 715 public void run() { 716 testLogger.clear(); 717 } 718 }); 719 t.start(); 720 t.join(); 721 assertEquals(ImmutableSet.of(Level.WARN, Level.ERROR), testLogger.getEnabledLevels()); 722 } 723 724 @Test 725 public void setEnabledLevelsForAllThreads() throws Exception { 726 final AtomicReference<ImmutableSet<Level>> inThreadEnabledLevels = new AtomicReference<ImmutableSet<Level>>(); 727 Thread t = new Thread(new Runnable() { 728 @Override 729 public void run() { 730 testLogger.setEnabledLevelsForAllThreads(Level.WARN, Level.ERROR); 731 inThreadEnabledLevels.set(testLogger.getEnabledLevels()); 732 } 733 }); 734 t.start(); 735 t.join(); 736 assertEquals(ImmutableSet.of(Level.WARN, Level.ERROR), inThreadEnabledLevels.get()); 737 assertEquals(ImmutableSet.of(Level.WARN, Level.ERROR), testLogger.getEnabledLevels()); 738 } 739 740 @Test 741 public void clearAllChangesAllLevels() throws Exception { 742 testLogger.setEnabledLevels(Level.WARN, Level.ERROR); 743 Thread t = new Thread(new Runnable() { 744 @Override 745 public void run() { 746 testLogger.clearAll(); 747 } 748 }); 749 t.start(); 750 t.join(); 751 assertEquals(Level.enablableValueSet(), testLogger.getEnabledLevels()); 752 } 753 754 @Test 755 public void printsWhenPrintLevelEqualToEventLevel() { 756 TestLoggerFactory.getInstance().setPrintLevel(Level.INFO); 757 758 testLogger.info(message); 759 760 assertThat(systemOutputRule.getSystemOut(), containsString(message)); 761 } 762 763 @Test 764 public void printsWhenPrintLevelLessThanEventLevel() { 765 TestLoggerFactory.getInstance().setPrintLevel(Level.DEBUG); 766 767 testLogger.info(message); 768 769 assertThat(systemOutputRule.getSystemOut(), containsString(message)); 770 } 771 772 @Test 773 public void doesNotWhenPrintLevelGreaterThanThanEventLevel() { 774 TestLoggerFactory.getInstance().setPrintLevel(Level.WARN); 775 776 testLogger.info(message); 777 778 assertThat(systemOutputRule.getSystemOut(), isEmptyString()); 779 } 780 781 @Test 782 public void nullMdcValue() { 783 MDC.clear(); 784 MDC.put("key", null); 785 786 testLogger.info(message); 787 788 assertThat(testLogger.getLoggingEvents(), is(asList(info(ImmutableMap.of("key", "null"), message)))); 789 } 790 791 private void assertEnabledReturnsCorrectly(Level levelToTest) { 792 testLogger.setEnabledLevels(levelToTest); 793 assertTrue("Logger level set to " + levelToTest + " means " + levelToTest + " should be enabled", 794 new Logger(testLogger).isEnabled(levelToTest)); 795 796 Set<Level> disabledLevels = difference(enablableValueSet(), newHashSet(levelToTest)); 797 for (Level disabledLevel: disabledLevels) { 798 assertFalse("Logger level set to " + levelToTest + " means " + levelToTest + " should be disabled", 799 new Logger(testLogger).isEnabled(disabledLevel)); 800 } 801 } 802 803 private void assertEnabledReturnsCorrectly(Level levelToTest, Marker marker) { 804 testLogger.setEnabledLevels(levelToTest); 805 assertTrue("Logger level set to " + levelToTest + " means " + levelToTest + " should be enabled", 806 new Logger(testLogger).isEnabled(levelToTest, marker)); 807 808 Set<Level> disabledLevels = difference(enablableValueSet(), newHashSet(levelToTest)); 809 for (Level disabledLevel: disabledLevels) { 810 assertFalse("Logger level set to " + levelToTest + " means " + levelToTest + " should be disabled", 811 new Logger(testLogger).isEnabled(disabledLevel, marker)); 812 } 813 } 814 }