NLog slows down and breaks my ASP.net MVC app

Mas*_*r_T 3 c# asp.net iis asp.net-mvc nlog

I have a library written in C# that performs various operations and uses NLog for logging. Currently, it is used in conjunction with a WinForms GUI to operate and everything works fine.

I have been asked to develop a new web-based interface to replace the old WinForms one, and I've chosen ASP.net MVC5.

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

但是,如果我在注释了该方法中的所有调用之后从库中调用相同的方法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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我不会做数千条会减慢应用程序速度的日志。我们讨论的最多是 15-20 次日志调用
  • 仅当记录到文件时才会发生这种情况。例如,如果我使用 xsi:type="NLogViewer" 登录到网络,则不会出现此问题

Mas*_*r_T 5

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

从那时起,我发现了,所以这里是:

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

所以基本上,在每一个新的日志行中,我的应用程序都会从​​头开始重新启动!难怪表现如此糟糕!

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