预期的日志记录开销是多少?
我已经试过这个例子

 private class Person
 {
    private static Logger logger = LogManager.GetCurrentClassLogger();
    public string Name { get; private set; }
    public Person(string name)
       {
           Name = name;
           logger.Info("New person created with name {0}", name);
       }
  }

  List<Person> people = new List<Person>();
  for (int i = 0; i < MAXTEST; i++)
  {
      people.Add(new Person(i.ToString()));
  }

MAXTEST值为100,500,1000,5000

结果为MAXTEST,无记录,无记录
100,  25ms, 186ms
500,  33ms, 812ms
1000, 33ms, 1554ms
5000, 33ms, 7654ms

授予一个人可能永远都不会记录这个过多的数量,但是性能会达到人们期望的水平吗?

我也尝试在配置中使用asyncwrapper

 <target name="asyncFile" xsi:type="AsyncWrapper">
   <target name="file" xsi:type="File" fileName="${basedir}/log.txt" />
 </target>

最佳答案

您只需要将async属性添加到targets元素中:

<targets async="true">
        <target name="file" xsi:type="File" fileName="${basedir}/log.txt" />

代替

<targets>
    <target name="asyncFile" xsi:type="AsyncWrapper">
        <target name="file" xsi:type="File" fileName="${basedir}/log.txt" />
    </target>

我想我对文档没有那么了解;-)



请记住,使用异步日志记录可能导致某些消息被丢弃。这是by design

引用:https://github.com/nlog/NLog/wiki/AsyncWrapper-target#async-attribute-and-asyncwrapper

异步属性和AsyncWrapper

不要结合使用Async属性和AsyncWrapper。这只会减慢处理速度,并且行为不可靠。

Async attribute will discard by default

async属性是以下各项的简写:
xsi:type="AsyncWrapper overflowAction="Discard" queueLimit="10000" batchSize="100" timeToSleepBetweenBatches="50"

10-08 01:40