Я использовал NLog для регистрации входа и выхода из функций в моем коде. Но при разных запусках одного и того же приложения я получаю разные журналы. Это многопоточное приложение. И я использую asyn c для регистрации информации.
Ниже моя конфигурация:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="asynclogger" xsi:type="AsyncWrapper" overflowAction="Grow" queueLimit="100000" batchSize="5000" timeToSleepBetweenBatches="1">
<target name="logfile" xsi:type="File" fileName="D:\IALogs\${processname}_${processid}_${threadid}.ialog" layout ="${longdate} ${processname} ${processid} ${threadid} ${mdlc:item=threadid} ${level} ${message}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="asynclogger" />
</rules>
</nlog>
Ниже приведен код регистратора.
class Program
{
private static readonly NLog.Logger nLogger = NLog.LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
Thread th1 = new Thread(() => print(5000000));
th1.Start();
Thread th2 = new Thread(() => print(5000000));
th2.Start();
th1.Join();
th2.Join();
print(10000);
Console.WriteLine("Done!!!!");
Console.ReadLine();
}
private static void print(int noOfItems)
{
for (int i = 1; i <= noOfItems; i++)
{
nLogger.Info("Printing i =" + i);
}
}
}
С Console.Readline () журналы полностью записываются, если нет Console.Readline (), журналы каждый раз отличаются, а также третий вызов метода Print из основного потока ничего не регистрирует, если нет Console.Readline (). Если Console.Readline () присутствует, то 3-й оператор печати записывает всю информацию