我只是不能让 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 文件。仅此特定应用程序无法登录,但仅在生产机器中!