预期的日志记录开销是多少?
我已经试过这个例子
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"