Create a TestNG runner class for each running thread using Cucumber

I'm writing a framework that uses TestNG and Appium in order to conduct mobile app tests in parallel. Right now i'm trying to implement Cucumber into the framework, which requires a TestNG runner class in order to run the Cucumber tests (see below).

package org.cucumber.tests;

@CucumberOptions(
        features="src/test/resources/features",
        glue={"org.cucumber.stepdefs"},
        plugin = {
        "com.cucumber.listener.ExtentCucumberFormatter:" }, monochrome = true)

public class TestNGRunner extends BaseTest {

    private static TestNGCucumberRunner testRunner;

    @BeforeClass
    public void setUP() {   
        testRunner = new TestNGCucumberRunner(TestNGRunner.class);
        ExtentProperties extentProperties = ExtentProperties.INSTANCE;
        extentProperties.setReportPath("output/" + this.hashCode() + "-report.html");
    }

    @Test(description="Tests",dataProvider="features")
    public void setUpClass(CucumberFeatureWrapper cFeature) {
        testRunner.runCucumber(cFeature.getCucumberFeature());
    }

    @DataProvider(name="features")
    public Object[][] getFeatures() {
        return testRunner.provideFeatures();
    }

    @AfterClass
    public static void teardown() {
        testRunner.finish();
    }

}

I have my tests running in parallel on each connected mobile device using ThreadLocal AppiumDriver (WebDriver) instances and specifying parameters in my testNG.xml file within <test> tags and setting the parallelism to 'tests', example:-

<suite name="Parallel Testing" verbose="1" parallel="tests">

        <test name="Samsung Galaxy S7">
        <parameter name="platform" value="Android 6.0.1" />
        <parameter name="udid" value="#############" />
        <parameter name="browserName" value="Chrome" />
        <parameter name="chromeDriverPort" value="9515" />
        <parameter name="systemPort" value="8201" />
        <parameter name="deviceName" value="Samsung Galaxy S7" />

    <packages>
      <package name="org.cucumber.tests"/>
    </packages> 
 </test> 

 <test name="Nexus 6P">
    <parameter name="platform" value="Android 7.1.1" />
    <parameter name="udid" value="########" />
    <parameter name="browserName" value="Chrome" />
    <parameter name="chromeDriverPort" value="9516" />
    <parameter name="systemPort" value="8202" />
    <parameter name="deviceName" value="Nexus 6P" />
<packages>
  <package name="org.cucumber.tests"/>
</packages> 

When it comes to generating a report using ExtentReports, all the tests from every running thread are placed into the same report - see below example.

Extent Report

My understanding of this is that the ExtentProperties.INSTANCE is shared between each of the running threads, so the file path is always overridden.

What i would like is an indiviual report for each running thread, which results in a report for each connected mobile device.

Presumably what i need to do is create a separate instance of the TestNGRunner class for each running thread. My question is - is this actually possible and if so, do i need to change my approach?