我有一个用 C# 编写的库,它执行各种操作并使用 NLog
进行日志记录。目前,它与 WinForms
GUI 结合使用,一切正常。
我被要求开发一个新的基于 Web 的界面来替换旧的 WinForms
,我选择了 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>
在您匆忙写下明显的建议之前的重要注意事项:
- 我不会做成千上万个会减慢应用程序速度的日志。是 最多谈论 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/