|
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; |
@@ -487,6 +490,45 @@ public void testDateformatPatternProperty() { |
487 | 490 | .containsPattern("\\d{4}-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}"); |
488 | 491 | } |
489 | 492 |
|
| 493 | + @Test |
| 494 | + public void consoleFiltersProperty() throws Exception { |
| 495 | + MockEnvironment environment = new MockEnvironment(); |
| 496 | + environment.setProperty("logging.filters.console", HelloFilter.class.getName() + |
| 497 | + "," + HiFilter.class.getName()); |
| 498 | + LoggingInitializationContext loggingInitializationContext = |
| 499 | + new LoggingInitializationContext(environment); |
| 500 | + this.loggingSystem.initialize(loggingInitializationContext, null, null); |
| 501 | + this.logger.info("Hello world"); |
| 502 | + this.logger.info("Hi world"); |
| 503 | + this.logger.info("Bye world"); |
| 504 | + String output = this.output.toString().trim(); |
| 505 | + assertThat(output).doesNotContain("Hello world"); |
| 506 | + assertThat(output).doesNotContain("Hi world"); |
| 507 | + assertThat(output).contains("Bye world"); |
| 508 | + } |
| 509 | + |
| 510 | + @Test |
| 511 | + public void fileFiltersProperty() throws Exception { |
| 512 | + MockEnvironment environment = new MockEnvironment(); |
| 513 | + environment.setProperty("logging.filters.file", HelloFilter.class.getName() + |
| 514 | + "," + HiFilter.class.getName()); |
| 515 | + LoggingInitializationContext loggingInitializationContext = |
| 516 | + new LoggingInitializationContext(environment); |
| 517 | + this.loggingSystem.initialize(loggingInitializationContext, null, |
| 518 | + getLogFile(null, tmpDir())); |
| 519 | + this.logger.info("Hello world"); |
| 520 | + this.logger.info("Hi world"); |
| 521 | + this.logger.info("Bye world"); |
| 522 | + String output = this.output.toString().trim(); |
| 523 | + File file = new File(tmpDir() + "/spring.log"); |
| 524 | + assertThat(output).contains("Hello world"); |
| 525 | + assertThat(output).contains("Hi world"); |
| 526 | + assertThat(output).contains("Bye world"); |
| 527 | + assertThat(getLineWithText(file, "Hello world")).isNull(); |
| 528 | + assertThat(getLineWithText(file, "Hi world")).isNull(); |
| 529 | + assertThat(getLineWithText(file, "Bye world")).isNotEmpty(); |
| 530 | + } |
| 531 | + |
490 | 532 | private static Logger getRootLogger() { |
491 | 533 | ILoggerFactory factory = StaticLoggerBinder.getSingleton().getLoggerFactory(); |
492 | 534 | LoggerContext context = (LoggerContext) factory; |
@@ -520,4 +562,24 @@ private String getLineWithText(String output, String outputSearch) { |
520 | 562 | return null; |
521 | 563 | } |
522 | 564 |
|
| 565 | + static class HelloFilter extends Filter<ILoggingEvent> { |
| 566 | + |
| 567 | + @Override |
| 568 | + public FilterReply decide(ILoggingEvent event) { |
| 569 | + return event.getMessage().contains("Hello") |
| 570 | + ? FilterReply.DENY : FilterReply.NEUTRAL; |
| 571 | + } |
| 572 | + |
| 573 | + } |
| 574 | + |
| 575 | + static class HiFilter extends Filter<ILoggingEvent> { |
| 576 | + |
| 577 | + @Override |
| 578 | + public FilterReply decide(ILoggingEvent event) { |
| 579 | + return event.getMessage().contains("Hi") |
| 580 | + ? FilterReply.DENY : FilterReply.NEUTRAL; |
| 581 | + } |
| 582 | + |
| 583 | + } |
| 584 | + |
523 | 585 | } |
0 commit comments