I had the similar situation where I had to generate random log files for special cases and here is what I created.
I called below code to get three files created.
Caller
var log1 = NLogAdapter.CreateCustomLogger("CustomLog1");
var log2 = NLogAdapter.CreateCustomLogger("CustomLog2");
var log3 = NLogAdapter.CreateCustomLogger("CustomLog3");
log1.Error("Error1");
log2.Error("Error2");
log3.Error("Error3");
Results:

NOTE: THIS APPROACH RESOLVES THE ISSUE of "same error logs written
into multiple files". Every instance created by these methods will be
completely isolated from other instances with no cross writing of log
entries.
Source code:
/// <summary>
/// Create Custom Logger using parameters passed.
/// </summary>
/// <param name="name">Name of file.</param>
/// <param name="LogEntryLayout">Give "" if you want just message. If omited will switch to full log paramaters.</param>
/// <param name="logFileLayout">Filename only. No extension or file paths accepted.</param>
/// <param name="absoluteFilePath">If you want to save the log file to different path thatn application default log path, specify the path here.</param>
/// <returns>New instance of NLog logger completly isolated from default instance if any</returns>
public static Logger CreateCustomLogger(string name = "CustomLog",
string LogEntryLayout = "${ date:format=dd.MM.yyyy HH\\:mm\\:ss.fff} thread[${threadid}] ${logger} (${level:uppercase=true}): ${message}. ${exception:format=ToString}",
string logFileLayout = "logs/{0}.${{shortdate}}.log",
string absoluteFilePath = "")
{
var factory = new LogFactory();
var target = new FileTarget();
target.Name = name;
if (absoluteFilePath == "")
target.FileName = string.Format(logFileLayout, name);
else
target.FileName = string.Format(absoluteFilePath + "//" +logFileLayout, name);
if (LogEntryLayout == "") //if user specifes "" then use default layout.
target.Layout = "${message}. ${exception:format=ToString}";
else
target.Layout = LogEntryLayout;
var defaultconfig = LogManager.Configuration;
var config = new LoggingConfiguration();
config.AddTarget(name, target);
var ruleInfo = new LoggingRule("*", NLog.LogLevel.Trace, target);
config.LoggingRules.Add(ruleInfo);
factory.Configuration = config;
return factory.GetCurrentClassLogger();
}
/// <summary>
/// Create Custom Logger using a seperate configuration file.
/// </summary>
/// <param name="name">Name of file.</param>
/// <returns>New instance of NLog logger completly isolated from default instance if any</returns>
public static Logger CreateCustomLoggerFromConfig(string configname)
{
var factory = new LogFactory(new XmlLoggingConfiguration(configname));
return factory.GetCurrentClassLogger();
}