为什么$ {basedir} NLog配置不起作用?

Wil*_*lly 8 c# asp.net-mvc nlog

为什么我不能在生产服务器中使用$ {basedir} nlog.config?如果我使用fileName="${basedir}/logs/${shortdate}.log",nlog不会记录消息信息,但是如果我改为类似fileName="C:/logs/${shortdate}.log"它会记录消息信息

我的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="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="f" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

控制器:

public class HomeController : Controller
{
    private static Logger logger = LogManager.GetCurrentClassLogger();

    public ActionResult Index()
    {
        logger.Debug("Test NLog");
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

Bre*_*een 9

此问题与文件权限有关.简短的说明:运行Web应用程序的用户没有写日志文件的权限.

根据.NET的版本和IIS的版本,可能有多种用户.

对于IIS 6,我会说Web应用程序作为NETWORK SERVICE帐户运行.

因此,您需要授予该用户权限写入/修改logs文件夹(我猜是Web根目录的子文件夹).如果您希望logsNLog自动创建文件夹,则需要将这些权限授予Web根目录.