 <p>I think I have worked out the issue. The steps follow:</p> <ul> <li>Create an an individual named LoggerRepository on each thread.</li> <li>Set the ThreadContexts property for the log file name.</li> <li>Use the XmlConfiguratior to configure the repository.</li> <li>Use the LogManager to Get the named logger (in the XML configuration file) using the named LoggerRepository for that thread.</li> </ul> <p>In return I get a new configured logger pointing to the respective file for that thread.</p> <p>The XML configuration is the same as it was originally and shown here for completeness:</p> <pre class="lang-xml prettyprint-override"><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;configuration&gt; &lt;configSections&gt; &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/&gt; &lt;/configSections&gt; &lt;log4net&gt; &lt;logger name="ProductionLogger"&gt; &lt;appender-ref ref="XmlAppender"/&gt; &lt;level value="ALL"/&gt; &lt;/logger&gt; &lt;appender name="XmlAppender" type="log4net.Appender.FileAppender"&gt; &lt;file type="log4net.Util.PatternString" value="D:\Temp\Logs\%property{LogName}.log" /&gt; &lt;immediateFlush value="true"/&gt; &lt;appendToFile value="true" /&gt; &lt;layout type="log4net.Layout.SimpleLayout" /&gt; &lt;/appender&gt; &lt;/log4net&gt; &lt;/configuration&gt; </code></pre> <p>The code to create the loggers is below. Each time this code is run it is run in its own thread.</p> <pre><code>ILoggerRepository loggerRepository = LogManager.CreateRepository(logFileName + "Repository"); ThreadContext.Properties["LogName"] = logFileName; log4net.Config.XmlConfigurator.Configure(loggerRepository); ILog logger = LogManager.GetLogger(logFileName + "Repository", "ProductionLogger"); </code></pre> <p>This seems to work with no issues so far. I will be moving forward with this solution for the moment but I will update this post if I find out anything else.</p>