NLog不写调试消息

时间:2014-02-24 19:51:53

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

在我的代码中,我有一些信息消息,例如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 个答案:

答案 0 :(得分:11)

您无法进行调试的原因是调试是最低级别日志级别 只需在nlog.config文件的rules标记中添加以下标记。

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

答案 1 :(得分:2)

您正在使用3个不同的日志目标。

数据库目标设置为信息级别,因此调试消息不会出现在那里。 文件目标仅接受错误消息(和更高版本),因此也不会进行任何调试。

最后一个目标控制台是调试消息应该被插入的控制台。但是我看到你没有设置消息的布局。试着看at this documentation。它说布局是必填字段。

此外,我建议您暂时设置其他文件目标并将其设置为接受调试消息。

答案 2 :(得分:1)

对于有这个问题的其他人来说,类似问题的回答只是救了我:https://stackoverflow.com/a/8881521/3959735

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

我想我可能通过尝试手动从另一个项目复制NLog配置文件来为自己造成这个问题;或者因为在我的项目中添加NLog时我收到了权限错误(我记不清任何具体细节) - 只是传递这些信息,以防有人帮助诊断自己的问题。

答案 3 :(得分: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>

答案 4 :(得分:0)

我发现问题与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。