2

我只是不能让 NLog 在 Windows Server 2012/IIS 8 下可靠地工作。这是一个 Azure 虚拟机(不是 webrole),所以事情应该很简单。最初我有 acync 包装器、基于数据库的目标等。但我已经把所有东西都剥离到了最低限度,似乎无法让它工作!

这是我的 NLog.config 文件:

<?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 xsi:type="File"
             name="nsec"
             fileName="${basedir}app_data/logs/nsec_${shortdate}.log"
             createDirs="true"
             layout="${longdate}|${level:uppercase=true}|${logger}|${aspnet-user-identity}|${message}"
             />
    </targets>

  <rules>
    <logger name="NSec" minlevel="Trace" writeTo="nsec"/> 
  </rules>
</nlog>

如您所见,这里没有什么特别之处。文件目标应该已写入 ./App_Data/Logs 目录,但大多数时候没有写入任何内容。有时有些东西会被写入文件......这是最令人愤怒的部分!

在 Cassini 和 IIS Express 下的本地日志运行良好。

有什么我需要添加到我的 web.config 以使 NLog 工作吗?我什至没有使用 ASP.NET 包装器!

有谁知道 NLog 和 IIS8 之间的不兼容?

更新

我在服务器上运行了 Process Monitor,并意识到甚至没有一次尝试写入、读取或查询日志文件。看起来 NLog 似乎被完全忽略了。我知道 NLog.config 文件是在启动时被读取的,因为如果我放置了一个无效的配置,我在访问我的应用程序时会出错,所以 NLog 正在解析文件。问题是,即使它正在被解析,并且有时会记录某些内容,但大多数时候什么都没有发生,并且,正如使用 Process Monitor 所确认的那样,没有一次尝试访问/创建/写入日志文件。

具有讽刺意味的是,在 Process Monitor 上,我可以看到其他 IIS 应用程序毫无问题地写入自己的 NLog 文件。仅此特定应用程序无法登录,但仅在生产机器中!

4

2 回答 2

3

在 Uwe Kein 的帮助下,我刚刚发现,他建议我使用 Process Monitor 来查看权限是否存在任何问题,事实上,甚至从未访问过日志文件。这让我开始怀疑为什么......我刚刚意识到作为 NSec 记录器的来源的 HttpModule 根本没有运行,所以事实上,实际上没有记录任何日志。

出现这个问题是因为目标机器上的 web.config 在以前的部署中没有成功更新,所以 HttpModule 是用 IIS6 方式配置的……我不得不将它添加到模块部分,如下所示:https://stackoverflow .com/a/2935410/285678

最棒的是,我刚刚添加了这个日志,试图找出这个 HttpModule 没有按预期运行的原因,所以找出 NLog 为什么“不工作”解决了这个问题(这是一个非常严重的问题,因为 HttpModule 与应用程序的安全系统有关!)

我试图关闭这个问题,因为它具有误导性,因为它根本不是 NLog 错误,但它需要 50 票才能关闭!所以我会把它作为对像我这样绝望地在 StackOverflow 中提出“不太明智”的问题的人的警告:-(

于 2013-11-12T21:46:22.840 回答
0

我在 web.config 文件中放置了一个空白的 Nlog 配置部分,这使它不查找 nlog.config 文件。一旦我删除了它,我的日志记录就开始工作了。

于 2014-01-09T15:02:38.490 回答