NLog无法记录调试信息。

8
在我的代码中,我有一些信息消息,如logger.Log("dwewe")logger.Debug("ddddf")
问题在于,即使我在VS中进行调试,Debug消息也没有被写入。
<?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"
      throwExceptions="true"
      internalLogLevel="Trace"
      internalLogFile="c:\nlog-app.log"
      autoReload="false"
      internalLogToConsole="true">
  <!--
  See http://nlog-project.org/wiki/Configuration_file
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <!-- file targets -->
    <target name="asyncFile" xsi:type="AsyncWrapper">
      <target xsi:type="File" name="f" fileName="${basedir}/Logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message} ${event-context:item=error-source} ${event-context:item=error-class} ${event-context:item=error-method} ${event-context:item=error-message} ${event-context:item=inner-error-message} ${event-context:item=stack-trace}"/>
    </target>

    <!-- database targets -->
    <target name="database" xsi:type="Database" keepConnection="true" useTransactions="true"
             dbProvider="System.Data.SqlClient"
             connectionString="data source=XXXXXX.database.windows.net;initial catalog=NLog;integrated security=false;persist security info=True;User ID=XXXXr;Password=BXXXX3"
              commandText="INSERT INTO Logs(EventDateTime, EventLevel, UserName, MachineName, EventMessage, ErrorSource, ErrorClass, ErrorMethod, ErrorMessage, InnerErrorMessage, StackTrace) VALUES (@EventDateTime, @EventLevel, @UserName, @MachineName, @EventMessage, @ErrorSource, @ErrorClass, @ErrorMethod, @ErrorMessage, @InnerErrorMessage, @StackTrace)">
      <!-- parameters for the command -->
      <parameter name="@EventDateTime" layout="${date:s}" />
      <parameter name="@EventLevel" layout="${level}" />
      <parameter name="@UserName" layout="${windows-identity}" />
      <parameter name="@MachineName" layout="${machinename}" />
      <parameter name="@EventMessage" layout="${message}" />
      <parameter name="@ErrorSource" layout="${event-context:item=error-source}" />
      <parameter name="@ErrorClass" layout="${event-context:item=error-class}" />
      <parameter name="@ErrorMethod" layout="${event-context:item=error-method}" />
      <parameter name="@ErrorMessage" layout="${event-context:item=error-message}" />
      <parameter name="@InnerErrorMessage" layout="${event-context:item=inner-error-message}" />
      <parameter name="@StackTrace" layout="${event-context:item=stack-trace}" />

    </target>

    <target name="console" xsi:type="Console" />

  </targets>
  <rules>
    <!-- add your logging rules here -->
    <logger name="*" minlevel="Info" writeTo="database" />
    <logger name="*" minlevel="Error" writeTo="asyncFile" />
    <logger name="*" minlevel="Trace" writeTo="console" />
  </rules>
</
5个回答

11
你无法获取Debug的原因是因为Debug是最低级别的日志级别,只需在nlog.config文件的rules标签中添加以下标记即可。
 <logger name="*" minlevel="Debug" writeTo="console" />

17
请参考这份文档:日志级别。Trace 是最低的,Debug 是第二低的。 - pepo

3

我发现问题与Visual Studio自动添加到项目中的默认appsettings.json有关。它长这样。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

解决方案是删除或重命名此部分。
{
  "Logging-DISABLE": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

这使得nlog.config可以被利用。


1
参见:https://github.com/NLog/NLog.Web/wiki/Missing-trace%5Cdebug-logs-in-ASP.NET-Core-3%3F - Rolf Kristensen

2

对于其他遇到此问题的人,类似问题的一个答案刚刚为我省了一大笔事情:https://dev59.com/zF_Va4cB1Zd3GeqPRT7k#8881521

如果您正在使用单独的NLog.config文件,请确保通过其文件属性将其设置为“始终复制”。或者,您可以在主要的App.config中包含NLog配置部分。

我认为我可能是自己造成了这个问题,因为我尝试手动从另一个项目复制NLog配置文件;或者因为当我将NLog添加到我的项目时,我遇到了权限错误(我无法记住任何具体细节) - 只是传递这些信息以帮助任何人诊断自己的问题。


2
您正在使用3个不同的日志目标。
数据库目标设置为Info级别,因此调试消息不会被记录到那里。文件目标仅接受错误消息(及更高级别),所以也不会有任何调试信息。
最后一个目标Console是应该记录调试信息的地方。但是我发现您没有设置消息的布局。请尝试查看此文档。它说布局是一个必填字段。
此外,我建议您暂时设置额外的文件目标,并将其设置为接受调试消息。

0

将nlog.config文件添加到您的项目中

我的配置文件示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
      <target name="logfile" xsi:type="File" fileName="${basedir}/Logs/${date:format=yyyy-MM-dd}_log.txt" />
      <target name="logconsole" xsi:type="Console" />
    </targets>

    <rules>
      <logger name="*" minlevel="Info" writeTo="logconsole" />
      <logger name="*" minlevel="Debug" writeTo="logfile" />
    </rules>
  </nlog>
</configuration>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接