NLog在Asp.net Core中不写入文件

本文关键字:文件 Core Asp net NLog | 更新日期: 2023-09-27 18:17:57

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

这是我的日志。配置文件代码如下:

<?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");

NLog在Asp.net Core中不写入文件

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

你必须启用复制到bin文件夹nlog.confignlog.config

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

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

参考:NLOG Configuration

我想你的配置文件应该是这样的。

<?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>

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

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

.NET Core需要NLog. extensions . logging包(NuGet链接),并在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页面