NLog 变慢并破坏了我的 ASP.net MVC 应用程序

NLog slows down and breaks my ASP.net MVC app

我有一个用 C# 编写的库,它执行各种操作并使用 NLog 进行日志记录。目前,它与 WinForms GUI 结合使用,一切正常。

我被要求开发一个新的基于 Web 的界面来替换旧的 WinForms 界面,我选择了 ASP.net MVC5

问题是,当我从使用 NLog 记录内容的库调用任何方法时,我的 ASP.net 应用程序中断:页面之间的加载时间变得非常长(约 30 秒左右) ) 并且所有状态都将丢失(TempDataViewData 词典被清空)。

但是,如果我在评论了所有对 NLog 的调用之后从库中调用完全相同的方法,一切都会顺利进行!

为什么会这样?为什么 NLog 杀死了我的 ASP.net MVC 应用程序? 这是 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">

  <targets>
    <target name="logfile" xsi:type="File" fileName="logs\Service.log"  keepFileOpen="false" 
               layout="${longdate} ${level} ${message} ${exception:format=tostring}"
                  archiveFileName="logs\Service.{#}.log"
            archiveEvery="Day"
            archiveNumbering="Rolling"
            maxArchiveFiles="30"
            />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

在匆忙写下明显的建议之前的重要注意事项:

我认为查找基目录存在问题,因此完整路径是错误的。

如果以前遇到过这些问题。例如,参见 this issue

请使用绝对路径或${basedir}

如果性能真的很重要,那么考虑从 <targets> 更改为 <targets async="true">

另请参阅:https://github.com/NLog/NLog/wiki/Performance

写这篇文章是为了进一步澄清,因为 Julian 的回答确实解决了问题,但我仍然不知道为什么 问题会发生。

从那时起,我就知道了,所以就这样了:

基本上,通过不指定绝对路径,日志文件被写入应用程序工作目录。在 ASP.net 网络应用程序中,此目录是部署网站的目录。这产生了一个巨大的问题:网站的主目录不断地被 IIS 监控以检测变化。当 NLog 将日志文件写入此目录时,IIS 检测到一个更改的文件,将其解释为正在重新部署的站点,然后重新启动整个 Web 应用程序.

所以基本上,在每一行新的日志中,我的应用程序都从头开始重新启动!难怪表现不佳!

TL;DR:不要向部署 ASP.net 网站的顶级目录写入任何内容。