Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基本NLog文件目标在IIS 8和Windows Server 2012下不工作_C#_Nlog_Iis 8 - Fatal编程技术网

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

C# 基本NLog文件目标在IIS 8和Windows Server 2012下不工作,c#,nlog,iis-8,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.

我只是无法使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文件时没有出现问题。只有这个特定的应用程序无法登录,但只能在生产机器中登录

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

出现此问题的原因是,在以前的部署中,目标计算机上的web.config未成功更新,因此HttpModule的配置方式为IIS6。。。我必须将其添加到模块部分,如所示:

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


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

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

在服务器上运行,看看目标文件夹上是否缺少任何权限如何?嗨,Uwe,这是一个生产服务器。我不想运行进程Mo但我可以保证IIS应用程序域在使用特定用户身份运行时拥有对所有文件夹的权限。如果我无法使其正常工作,我将尝试复制虚拟机并在那里使用进程监视器,但Azure不会使复制虚拟机变得容易,事实上,大多数情况下,它比从stratch!Uwe安装虚拟机更难,我使用过Process Monitor,甚至没有一次尝试写入日志文件!!!看起来NLog完全被忽略了。我正在更新问题…如何记录到不同的、非基于文件的日志目标(如事件日志或ASP.NET跟踪)上从NLog内部查看是否是文件问题?@UweKeim我有一个数据库目标设置,但日志记录与文件目标一样不稳定…我将把应用程序池更改为另一个应用程序池,其中有一个正确记录的应用程序。。。