NLog不能在IIS上工作。

8

我在项目中添加了NLog。按照说明,我创建了NLog.config文件。

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}" 
            fileName="${basedir}/${shortdate}.log" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>

然后只需记录一些内容。

var logger = LogManager.GetCurrentClassLogger();
logger.Info("xxxx");

开发者web服务器工作正常,但是当我将应用程序发布到IIS时,没有生成任何日志。


你是否将NLog.config文件包含在要发布的文件列表中?你的应用程序是否有${basedir}/${shortdate}.log的写入权限? - Rich O'Kelly
1
是的,NLog.config在应用程序的根目录中,并且我已将路径修改为 ${basedir}/files/${shortdate}.log ,其中 files 目录具有写入权限。 - user49126
3个回答

14

在IIS中编辑网站权限,然后在安全选项卡下授予IIS_IUSRS组完全权限。

在应用程序池中,找到你的应用程序正在使用的池并设置某个特定用户。

下面的图片描述了逐步操作的过程:

使用IIS图像为用户分配用户的步骤。


13

NLog.config文件的"Copy to Output Directory"属性是否设置为"Copy always"?


0

其中一个问题是IIS没有权限写入日志文件。如果您确定在发布中有NLog.Config并且日志文件仍未生成,则请为您的IIS应用程序池提供完全访问权限。

您可以将“throwExceptions =”true“添加到nlog配置中以查看问题所在。应该是这样的:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

如果你确定是访问问题,可以像下面这样为应用程序池授权。

首先找到你的应用程序池(如果你不知道):

  • 在IIS管理器中右键单击你的网页名称。
  • 在管理网站选项卡中点击高级设置。
  • 你将看到顶部的应用程序池名称。

为你的应用程序池授予完全访问权限:

  • 在IIS管理器中右键单击你的网页名称。
  • 点击编辑权限。
  • 在打开的窗口中选择安全选项卡。
  • 点击编辑按钮
  • 选择你的应用程序池名称。(如果你的应用程序池不在列表中,那么你就必须添加它
  • 然后在底部选择完全访问权限并选择确定离开。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接