[ 
https://issues.apache.org/jira/browse/DRILL-5203?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul Rogers resolved DRILL-5203.
--------------------------------
    Resolution: Fixed

Added as part of the new "cluster fixture" unit test framework.

> Provide per-test control over logging for unit tests
> ----------------------------------------------------
>
>                 Key: DRILL-5203
>                 URL: https://issues.apache.org/jira/browse/DRILL-5203
>             Project: Apache Drill
>          Issue Type: Improvement
>          Components: Tools, Build & Test
>    Affects Versions: 1.9.0
>            Reporter: Paul Rogers
>            Assignee: Paul Rogers
>            Priority: Minor
>
> Drill provides extensive logging. In production, users typically turn on all 
> logging to some useful level, say WARN for normal operation or DEBUG when 
> problems occur.
> Drill has a wide variety of unit tests, each of which covers some particular 
> part of the product. When working in that area, we wish to turn on logging 
> just for that one area, and often just for the test being used to drive 
> development (in Test-Driven Development fashion.)
> Today, we control logging only via the single, shared {{logback.xml}} file in 
> {{$DRILL_HOME/conf}} in production, and the {{logback-test.xml}} file in the 
> {{src/resources}} directory during development. This is a very blunt tool: it 
> affects all tests and is cumbersome to use on a per-test basis.
> This, then is the motivation for a "log fixture": a simple piece of code that 
> lets us turn on very targeted logging for the duration of a single test, then 
> restore the defaults afterwards.
> Example:
> {code}
>   @Test
>   public void testSomething() throws Exception {
>     LogFixtureBuilder logBuilder = LogFixture.builder()
>         .toConsole()
>         .disable() // Turn off all logging...
>         // Except for this one logger
>         .logger(ExternalSortBatch.class, Level.DEBUG);
>     try (LogFixture logs = logBuilder.build()) {
>       // Do the test here: the one logger is set to debug to the console
>     }
>     // Logging back to configured settings
>   }
> {code}
> Alternatively, the settings can affect an entire test class:
> {code}
>   private static LogFixture logFixture;
>   @BeforeClass
>   public static void setup() {
>     logFixture = LogFixture.builder()
>         .toConsole()
>         .disable()
>         .logger(ExternalSortBatch.class, Level.DEBUG)
>         .build();
>   }
>   @AfterClass
>   public void tearDown() {
>     logFixture.close();
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to