繁体   English   中英

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

[英]NLog not creating log in MVC application?

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

我做的第一件事是确认我的 NLog.config 文件的属性在“Copy to Output”属性中设置为“Copy always”。 我什至通过 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);
    }

记录器名称通常使用这样的东西

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

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

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

在内部, LogManager.GetCurrentClassLogger查看当前 Stack 以确定调用类型:(移除了 Silverlight 条件):

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

我感谢大家的建议。 我花了几个小时试图找出 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM