NLog没有在MVC应用程序中创建日志?

时间:2015-11-03 21:12:08

标签: c# asp.net-mvc asp.net-mvc-4 nlog

我在几个控制台应用程序上使用NLog没有任何问题,但这是我第一次在MVC Web应用程序上使用它。当我尝试登录文件时没有任何反应。没有错误,也没有创建任何日志文件。当我在本地浏览应用程序时,我也没有出现任何错误。

我做的第一件事是确认我的NLog.config文件的属性在“复制到输出”属性中设置为“始终复制”。我甚至通过NuGet卸载了NLog,然后再次安装它以及关闭VS并再次打开项目。

我做了一些搜索,我发现的唯一真正的建议是首先创建文件夹位置,然后检查应用程序池上的权限。我创建了文件夹位置,但似乎也没有用。我在Visual Studio 2015中通​​过调试模式运行它,它会自动启动本地Web服务器,因此我不知道如何找出它用于写入文件位置的服务。

在下面的例子中,我可以在我的控制器内的ActionResult上设置一个断点,并在“gate”参数中看到一个值。我继续测试记录器并且没有任何错误。我查看我的日志位置,没有创建日志文件。

任何人对我可以尝试的内容有任何建议吗?

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"
      autoReload="true" 
      throwExceptions="true">

  <variable name="LogDirBase" value="D:/logs/RampInfo"/>
  <variable name="LogYear" value="${date:format=yyy}"/>
  <variable name="LogMonth" value="${date:format=MM}"/>
  <variable name="LogDay" value="${date:format=dd}"/>
  <variable name="LogFileShortDate" value="${date:format=yyyy-MM-dd}"/>

  <targets>

    <target name="DefaultTarget"
      xsi:type="File"
      fileName="${LogDirBase}/${LogFileShortDate}.log"
      encoding="utf-8"
      layout="${longdate} | ${callsite} | ${message}"
      maxArchiveFiles="14"
    />

  </targets>

  <rules>
    <logger name="defaultLogger" minlevel="Debug" writeTo="DefaultTarget" />
  </rules>
</nlog>

我的控制器

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


        // GET: GateInfo
        public ActionResult Gate(string gate)
        {

            logger.Debug("Start action result. Gate: " + gate);
    }

2 个答案:

答案 0 :(得分:0)

记录器名称通常使用类似

的内容
<logger name="Name.Space.RampController" minlevel="Debug" writeTo="DefaultTarget" /> 

或者,如果您只想为您的应用程序提供一个日志文件:

<logger name="*" minlevel="Debug" writeTo="DefaultTarget" /> 

在内部,LogManager.GetCurrentClassLogger查看当前堆栈以确定调用类型:(已删除silverlight条件):

public new T GetCurrentClassLogger()
{
    StackFrame frame = new StackFrame(1, false);
    return this.GetLogger(frame.GetMethod().DeclaringType.FullName);
}

答案 1 :(得分:-1)

我感谢大家的建议。我花了好几个小时试图找出NLog无法正常工作的原因。我放弃了这一天,今天早上以一种清新的心态回到了它。我基本上重新开始使用全新的NLog.config并且工作正常。我从不同的项目中复制了不同的NLog配置。我真的没有看到两者之间的区别,但无论哪种方式,它现在都按预期工作。

这是我使用的新NLog.config。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      autoReload="true" 
      throwExceptions="true">

  <variable name="LogDirectory" value="D:\integration\logs\RampInfo"/>

  <targets>
    <target name="LogTarget" 
            xsi:type="File" 
            fileName="${LogDirectory}/${shortdate}.log" 
            encoding="utf-8"
            maxArchiveFiles="14" 
            layout="${longdate} ${callsite} ${message}" />
  </targets>

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