|
26 | 26 | import ch.qos.logback.classic.Level; |
27 | 27 | import ch.qos.logback.classic.Logger; |
28 | 28 | import ch.qos.logback.classic.LoggerContext; |
| 29 | +import ch.qos.logback.classic.spi.ILoggingEvent; |
29 | 30 | import ch.qos.logback.classic.spi.LoggerContextListener; |
30 | 31 | import ch.qos.logback.core.ConsoleAppender; |
31 | 32 | import ch.qos.logback.core.CoreConstants; |
| 33 | +import ch.qos.logback.core.filter.Filter; |
32 | 34 | import ch.qos.logback.core.rolling.RollingFileAppender; |
33 | 35 | import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy; |
| 36 | +import ch.qos.logback.core.spi.FilterReply; |
34 | 37 | import org.apache.commons.logging.Log; |
35 | 38 | import org.apache.commons.logging.impl.SLF4JLogFactory; |
36 | 39 | import org.hamcrest.Matcher; |
@@ -454,6 +457,45 @@ public void testDateformatPatternProperty() { |
454 | 457 | .containsPattern("\\d{4}-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}"); |
455 | 458 | } |
456 | 459 |
|
| 460 | + @Test |
| 461 | + public void consoleFiltersProperty() throws Exception { |
| 462 | + MockEnvironment environment = new MockEnvironment(); |
| 463 | + environment.setProperty("logging.filters.console", HelloFilter.class.getName() + |
| 464 | + "," + HiFilter.class.getName()); |
| 465 | + LoggingInitializationContext loggingInitializationContext = |
| 466 | + new LoggingInitializationContext(environment); |
| 467 | + this.loggingSystem.initialize(loggingInitializationContext, null, null); |
| 468 | + this.logger.info("Hello world"); |
| 469 | + this.logger.info("Hi world"); |
| 470 | + this.logger.info("Bye world"); |
| 471 | + String output = this.output.toString().trim(); |
| 472 | + assertThat(output).doesNotContain("Hello world"); |
| 473 | + assertThat(output).doesNotContain("Hi world"); |
| 474 | + assertThat(output).contains("Bye world"); |
| 475 | + } |
| 476 | + |
| 477 | + @Test |
| 478 | + public void fileFiltersProperty() throws Exception { |
| 479 | + MockEnvironment environment = new MockEnvironment(); |
| 480 | + environment.setProperty("logging.filters.file", HelloFilter.class.getName() + |
| 481 | + "," + HiFilter.class.getName()); |
| 482 | + LoggingInitializationContext loggingInitializationContext = |
| 483 | + new LoggingInitializationContext(environment); |
| 484 | + this.loggingSystem.initialize(loggingInitializationContext, null, |
| 485 | + getLogFile(null, tmpDir())); |
| 486 | + this.logger.info("Hello world"); |
| 487 | + this.logger.info("Hi world"); |
| 488 | + this.logger.info("Bye world"); |
| 489 | + String output = this.output.toString().trim(); |
| 490 | + File file = new File(tmpDir() + "/spring.log"); |
| 491 | + assertThat(output).contains("Hello world"); |
| 492 | + assertThat(output).contains("Hi world"); |
| 493 | + assertThat(output).contains("Bye world"); |
| 494 | + assertThat(getLineWithText(file, "Hello world")).isNull(); |
| 495 | + assertThat(getLineWithText(file, "Hi world")).isNull(); |
| 496 | + assertThat(getLineWithText(file, "Bye world")).isNotEmpty(); |
| 497 | + } |
| 498 | + |
457 | 499 | private static Logger getRootLogger() { |
458 | 500 | ILoggerFactory factory = StaticLoggerBinder.getSingleton().getLoggerFactory(); |
459 | 501 | LoggerContext context = (LoggerContext) factory; |
@@ -487,4 +529,24 @@ private String getLineWithText(String output, String outputSearch) { |
487 | 529 | return null; |
488 | 530 | } |
489 | 531 |
|
| 532 | + static class HelloFilter extends Filter<ILoggingEvent> { |
| 533 | + |
| 534 | + @Override |
| 535 | + public FilterReply decide(ILoggingEvent event) { |
| 536 | + return event.getMessage().contains("Hello") |
| 537 | + ? FilterReply.DENY : FilterReply.NEUTRAL; |
| 538 | + } |
| 539 | + |
| 540 | + } |
| 541 | + |
| 542 | + static class HiFilter extends Filter<ILoggingEvent> { |
| 543 | + |
| 544 | + @Override |
| 545 | + public FilterReply decide(ILoggingEvent event) { |
| 546 | + return event.getMessage().contains("Hi") |
| 547 | + ? FilterReply.DENY : FilterReply.NEUTRAL; |
| 548 | + } |
| 549 | + |
| 550 | + } |
| 551 | + |
490 | 552 | } |
0 commit comments