NLog не регистрирует отладочные сообщения - PullRequest
1 голос
/ 13 февраля 2020

У меня проблема с регистрацией сообщений уровня отладки в. NET Core 3.1 Worker Service project. Ни моя файловая цель, ни консоль не получают сообщения об уровне отладки. События информационного уровня записываются как ожидалось. Я проверил старый вопрос с тем же названием , чтобы убедиться, что все эти поля отмечены.

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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="%appdata%\FileTransferService\nlog-internal.log">

  <variable name="logdir" value="${specialfolder:folder=ApplicationData}/FileTransferService"/>
  <variable name="stdlayout" value="${longdate}|${level:uppercase=true}|${message:exceptionSeparator=|}${exception:format=ToString}"/>

  <targets>  
    <target name="default" xsi:type="AsyncWrapper" overflowAction="Block">
      <target name="defaultlog" xsi:type="File"
              fileName="${logdir}/dftslog.txt"
              layout="${stdlayout}"
              archiveEvery="Month" concurrentWrites="false"/>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="default"/>
  </rules>
</nlog>

appsettings. json

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

Я пытался настроить Microsoft и Microsoft.Hosting.Lifetime также на Отладку, но это не имело никакого эффекта.

Program.CreateHostBuilder метод

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .ConfigureLogging((context, logBuilder) => {
            logBuilder.ClearProviders();
            logBuilder.AddConfiguration(context.Configuration.GetSection("Logging"));
            logBuilder.SetMinimumLevel(LogLevel.Debug);
            logBuilder.AddConsole();
            logBuilder.AddNLog();
        })
        .ConfigureServices((hostContext, services) => {
            services.AddHostedService<Worker>();
            services.AddTransient(typeof(ITransferService), typeof(TransferService));
        });

Вот несколько дополнительных заметок:

  • Я попытался вызвать SetMinimumLevel без эффекта.
  • NLog. config установлен на Copy Always.
  • Я получаю те же результаты без AddConsole. Это было фактически добавлено после того, как я увидел, что отладочные сообщения не регистрируются.

1 Ответ

1 голос
/ 14 февраля 2020

Проблема, по-видимому, связана с Visual Studio 2019.

Хотя сама проблема сохраняется, события уровня отладки записываются как в консоль, так и в плоский файл, когда я запускаю приложение вне Visual Studio. Это не связано с отладчиком, как я мог бы ожидать, потому что он демонстрирует то же поведение, если я запускаю его без отладчика в Visual Studio.

Я просмотрел настройки Visual Studio и сделал быстрый поиск, но я не мог найти ничего связанного. Тем не менее, знание того, что события будут регистрироваться вне Visual Studio, решает мою проблему в необходимой степени.

...