c# - NLog 减慢并破坏了我的 ASP.net MVC 应用程序

标签 c# asp.net asp.net-mvc iis nlog

我有一个用 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>

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

  • 我不会做成千上万个会减慢应用程序速度的日志。是 最多谈论 15-20 个日志调用
  • 这仅在记录到文件时发生。例如,如果我使用 xsi:type="NLogViewer"登录到网络,则不会出现此问题

最佳答案

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

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

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

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

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

关于c# - NLog 减慢并破坏了我的 ASP.net MVC 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998883/

相关文章:

c# - 接口(interface)实现: implicit vs explicit

c# - 无法在更新面板 C# 中显示 Tiny MCE Editor

c# - 我制作了一个矩形如何检查鼠标是否点击了它?

asp.net - 保存数据而不是添加到数据库

c# - 文件正在被另一个进程使用

c# - 使用 Owin.Testing 时获取远程 ip

ASP.NET 的 SqlCacheDependency 的 PHP 版本

c# - 如何确保将 appsettings.dev.json 复制到输出文件夹?

asp.net - 如何将 "Users"集成到我的 DDD 模型中并验证用户身份?

c# - 在每个 Controller 操作之前/之后执行代码