gpt4 book ai didi

.net-core - 与 log4net 相比,使用 Nlog 的性能较差

转载 作者:行者123 更新时间:2023-12-04 01:41:15 35 4
gpt4 key购买 nike

我们最近将 ASP.NET Core Web API 项目的日志记录框架从 log4net 更新为 NLog,当我们进行性能测试请求/二流服务时,NLog 与 NLog 相比要少得多。下面是我的 NLog 配置文件。

请就我们使用 NLog 的性能问题提出任何想法。

<?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"
autoReload="true"
internalLogLevel="info"
internalLogFile="C:\temp\internal-nlog.txt">

<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="SumoLogic.Logging.NLog"/>
</extensions>

<!-- the targets to write to -->
<targets>
<!-- write logs to console -->
<target xsi:type="ColoredConsole" name="allConsole" formatMessage="false" layout="${longdate}|${level:uppercase=true}|${message}" />

<target name="sumoLogic" type="SumoLogicTarget" formatMessage="false" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff} ${level}, ${message}${exception:format=tostring}${newline}">
<Url>#{Logging__SumoLogic__EndpointUrl}</Url>
<ConnectionTimeout>30000</ConnectionTimeout>
<SourceName>#{Logging__SumoLogic__SourceName}</SourceName>
<SourceCategory>#{Logging__SumoLogic__SourceCategory}</SourceCategory>
<UseConsoleLog>true</UseConsoleLog>
</target>

<target name="bufferedSumoLogic" type="BufferedSumoLogicTarget" formatMessage="false" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff} ${level}, ${message}${exception:format=tostring}${newline}">
<Url>#{Logging__SumoLogic__EndpointUrl}</Url>
<SourceName>#{Logging__SumoLogic__SourceName}</SourceName>
<SourceCategory>#{Logging__SumoLogic__SourceCategory}</SourceCategory>
<ConnectionTimeout>30000</ConnectionTimeout>
<RetryInterval>5000</RetryInterval>
<MessagesPerRequest>10</MessagesPerRequest>
<MaxFlushInterval>10000</MaxFlushInterval>
<FlushingAccuracy>250</FlushingAccuracy>
<MaxQueueSizeBytes>500000</MaxQueueSizeBytes>
<UseConsoleLog>true</UseConsoleLog>
</target>
</targets>

<!-- rules to map from logger name to target -->
<rules>
<!-- Skip non-critical Microsoft logs and so log only own logs -->
<logger name="Microsoft.*" maxLevel="Info" final="true" />

<!-- Write all debug messages to console -->
<logger name="*" minlevel="#{Logging__ConsoleLog__LevelMin}" writeTo="allConsole" />

<!-- Write to sumo buffered log -->
<logger name="*" minlevel="#{Logging__BufferedLog__LevelMin}" maxlevel="#{Logging__BufferedLog__LevelMax}" writeTo="bufferedSumoLogic" />

<!-- Write to sumo instant log -->
<logger name="*" minlevel="#{Logging__InstantLog__LevelMin}" maxlevel="#{Logging__InstantLog__LevelMax}" writeTo="sumoLogic" />
</rules>
</nlog>

最佳答案

不幸的是,您无法加快目标在内部执行的操作,它们可能正在执行 Web 请求、数据库调用、写入文件等(我想这毕竟没问题)但是您可以避免阻塞应用程序线程您正在记录的内容,这对我来说是重要的事情。

只需添加 async="true"给你的targets元素,它应该是: <targets async="true">

下面链接的一些解释:

Asynchronous target wrapper allows the logger code to execute more quickly, by queuing messages and processing them in a separate thread. You should wrap targets that spend a non-trivial amount of time in their Write() method with asynchronous target to speed up logging.

还要记住,有些目标在异步模式下效果不佳(您会通过测试发现,在我的例子中是 RollbarSharp ),因此您可以创建另一个 targets这些部分。

您可以在这里获得更多信息:https://github.com/nlog/NLog/wiki/AsyncWrapper-target

祝你好运!

关于.net-core - 与 log4net 相比,使用 Nlog 的性能较差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57316542/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com