c# - 基本 NLog 文件目标在 IIS 8 和 Windows Server 2012 下不工作

标签 c# nlog iis-8

我无法让 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 下,日志工作完美。

为了让 NLog 正常工作,我需要在我的 web.config 中添加什么吗?我什至没有使用 ASP.NET 包装器!

有谁知道 NLog 和 IIS8 之间有任何不兼容的问题吗?

更新

我在服务器上运行了 Process Monitor,发现甚至没有尝试写入、读取或查询日志文件。看起来好像 NLog 被完全彻底地忽略了。我知道 NLog.config 文件在启动时被读取,因为如果我输入无效配置,我在访问我的应用程序时会收到错误消息,因此 NLog 正在解析该文件。问题是,即使它正在被解析,有时也会记录一些东西,但大多数时候什么都没有发生,而且,正如使用 Process Monitor 所确认的那样,没有一次尝试访问/创建/写入日志文件。

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

最佳答案

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

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

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

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

关于c# - 基本 NLog 文件目标在 IIS 8 和 Windows Server 2012 下不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938501/

相关文章:

security - HTTP Slow Post和IIS设置可防止

windows-8 - Windows 8 笔记本电脑上的空白 iis8 本地主机页面

css - 带有土耳其字符的 Internet Explorer 7,8 字体

c# - 查找和使用隐藏属性(例如 DisplayRectangle)

c# - GTK C# 小部件更改颜色不起作用

c# - 需要递归函数来生成唯一的字符串组合

c# - NLog有多灵活?我想要自定义布局属性

c# - 只读静态记录器字段的标准命名约定是什么?

c# - 使用 NLog 输出到两个日志文件之一

c# - 是否有 .Net 的内存缓存端口?