NLog不会在ASP.NET Core项目上创建日志文件

时间:2017-04-15 19:23:54

标签: asp.net nlog

我是使用NRC和ASP.NET Core的新手,所以我在这里遵循了指南: https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-(project.json)

我在项目目录的根目录下创建了以下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"
      internalLogLevel="Warn"
      internalLogFile="c:\temp\internal-nlog.txt">

  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>


  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="${basedir}\nlog-all-${shortdate}.log"
                 layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />


    <target xsi:type="File" name="ownFile-web" fileName="${basedir}\nlog-own-${shortdate}.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>

在控制器内部,我调用这样的一行:

_logger.LogInformation("Entered CustomerRange method");

在Visual Studio的输出窗口中返回以下内容:

CustomerMgmtAPI.Controllers.CustomerController:Information: Entered CustomerRange method

但是,NLog永远不会创建实际的日志文件。我想知道是否有人可以在这里指出NLog配置中的错误,因为我一直在查看NLog for ASP.NET Core项目的文档,我自己也找不到错误。

2 个答案:

答案 0 :(得分:2)

因此问题的实际解决方法是从nlog.config文件中删除第一行:

<?xml version="1.0" encoding="utf-8" ?>

我删除了这一行,一切都按预期开始工作。我还注意到Visual Studio在出现该行时给出了这些错误:

Invalid token 'Text' at root level of document.
Unexpected XML declaration. The XML declaration must be the first node in the document and no white space characters are allowed to appear before it.

在这种情况下,似乎NLog教程已经破解,因为我刚从ASP.NET Core的示例中接管了这个文件。我正在使用VS2017,所以也许这个版本的VS不兼容?

答案 1 :(得分:0)

将NLog与ASP.NET Core一起使用的肮脏小秘密是,您可以像在ASP.NET和ASP.NET MVC中一样配置和创建日志。您只需像往常一样使用常规的NLog Nuget软件包即可。

只需在根目录等中创建一个NLog.config。甚至不必在config或其他地方进行任何额外的配置即可使其工作。您只需在类中引用NLog,然后使用LogManager创建记录器即可。

这意味着您没有在Program.cs等文件中拥有所有的联系。