NLog不会写入Asp.net Core中的文件

时间:2016-11-14 06:59:47

标签: c# asp.net asp.net-core nlog

我在我的Asp.net核心应用程序中使用NLog,但是NLog无法写入文件,我已经准备好了文件的更改权限,但仍然面临问题。文件首次创建,但无法在该文件中写入日志。

以下是我的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:\git\damienbod\AspNetCoreNlog\Logs\internal-nlog.txt">

    <targets>
      <target xsi:type="File" name="allfile" fileName="D:\nlog-all.txt"
                  layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}"
                  keepFileOpen="false"/>
      <target xsi:type="EventLog"
          name="String"
          layout="Layout"
          machineName="String"
          source="Layout"
          category="Layout"
          eventId="Layout"
          log="String"
          maxMessageLength="Integer" />
    </targets>

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

这是我控制器的代码

NLog.Logger _Logger= LogManager.GetCurrentClassLogger();
            _Logger.Info("Hello i m executing");

4 个答案:

答案 0 :(得分:0)

我认为这是因为“Info”级别实际上具有比“Debug”更高的优先级。像这样更改配置可能有效。

 <logger name="*" minlevel="Debug" maxLevel="Info" writeTo="File" />

参考:NLOG Configuration

答案 1 :(得分:0)

我认为您的配置文件应该是这样的。

<?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:\git\damienbod\AspNetCoreNlog\Logs\internal-nlog.txt">

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

  </targets>

  <rules>
    <logger name="*" minlevel="Debug" maxlevel="Info"  writeTo="allfile" />
  </rules>
</nlog>

我已经删除了不必要的部分,也按照你必须指定的@TheCE Jb的建议删除了mixlevel和maxlevel。

除此之外,我还可以看到你有DEBUG字的类型。

答案 2 :(得分:0)

您需要.NET Core的NLog.Extensions.Logging包(NuGet link)并在startup.cs中启用NLog:

public void Configure(IApplicationBuilder app, 
                      IHostingEnvironment env,  ILoggerFactory loggerFactory)
{
  //add NLog to ASP.NET Core
  loggerFactory.AddNLog();

  //configure nlog.config in your project root
  env.ConfigureNLog("nlog.config");

  ...

有关详细信息,请参阅GitHub page

答案 3 :(得分:0)

只需点击此链接: https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-(csproj---vs2017)

您必须为 nlog.config 启用copy to bin文件夹 Image copy nlog.config