Управление конфигурацией ведения журнала с NLog in. NET Core 3 - PullRequest
0 голосов
/ 08 января 2020

Я использую NLog в рабочем приложении. NET Core 3.1. Следуя инструкциям по NLog, я вставил файл nlog.config для управления конфигурацией.

Теперь я запутался, потому что у меня есть три момента, в которых я настраиваю ведение журнала:

1. In the code where I need to create a logger in a dependency injection 
context

// Other code...

services.AddScoped<IApplyJcdsCommandsJob, ApplyJcdsCommandsJob>(provider =>
{
    var loggerFactory = LoggerFactory.Create(builder =>
    {
        builder
            .ClearProviders()
            .AddFilter("Microsoft", Microsoft.Extensions.Logging.LogLevel.Trace)
            .AddFilter("System", Microsoft.Extensions.Logging.LogLevel.Trace)
            .AddFilter("ApplyJcdsCommandsJob", Microsoft.Extensions.Logging.LogLevel.Trace)
            //.AddConsole()
            //.AddEventLog();
            .AddNLog(configuration);
    });

    Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger<CommandsJob>();

    return new CommandsJob(logger);
})

// Other code...

2. In appSettings.json

  {
     "Logging": {
     "IncludeScopes": false,
     "LogLevel": {
     "Default": "Trace",
     "System": "Trace",
     "Microsoft": "Trace"
    }
  }
}

3. in NLog.config

The default config file produced by the nuget package installation:

<!-- a section of the config -->
<targets>
    <target xsi:type="File" name="f" 
fileName="${basedir}/logs/${shortdate}.log"
        layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>

<rules>
    <logger name="*" minlevel="Trace" writeTo="f" />
</rules>
<!-- ... -->

Что я видно, что если я удалю файл Nlog.config, файл журнала не будет создан. Другие изменения шва не имеют никакого эффекта.

Как связаны эти конфигурации? Как лучше всего включить / выключить ведение журнала и установить уровень?

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Люди, которые решили использовать NLog, обычно также хотят отключить всю MEL-фильтрацию, чтобы избежать путаницы с двумя системами фильтрации. Так что NLog wiki-tutorial нацелен на этих пользователей.

Я думаю, что люди, которые являются первыми пользователями MEL, вероятно, просто будут использовать new HostBuilder().CreateDefaultBuilder().Build() (настроит все с включенным оружием).

Но если остановиться на простом примере, то вам нужно удалить:

loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);

И добавить:

loggingBuilder.AddConfiguration(config.GetSection("Logging"));

Так это выглядит так:

serviceCollection.AddLogging(loggingBuilder =>
{
   loggingBuilder.ClearProviders();
   loggingBuilder.AddConfiguration(config.GetSection("Logging"));
   loggingBuilder.AddNLog(config);
})

ILoggingBuilder.AddConfiguration можно найти на Nuget: Microsoft.Extensions.Logging.Configuration

1 голос
/ 08 января 2020

AddNLog регистрирует NLog, как и любой другой Microsoft Extension Logger (MEL) LoggingProvider (аналогично AddConsole).

Это означает, что NLog получает только выходные данные журнала, которые были «одобрены» MEL- ILogger. Таким образом, любая фильтрация, настроенная в MEL, будет препятствовать тому, чтобы logevents достигал NLog.

NLog по-прежнему имеет возможность перенаправления на основе имен Logger и серьезности LogLevel на требуемые цели NLog.

Вы можете решите, хотите ли вы использовать MEL-фильтрацию или NLog-фильтрацию или их комбинацию. Но если вы просто хотите использовать «чистый» NLog, просто создайте экземпляр NLog.Extensions.Logging.NLogLoggerFactory. Это специализированная фабрика ILogger, которая игнорирует MEL-Filtering-Configuration.

Кстати. немного странно, что вы создаете изолированную LoggerFactory для каждого экземпляра CommandsJob. Можно подумать, что вы зарегистрируете тип в инъекционной структуре зависимостей и позволите ему вводить параметры конструктора. См. Также этот пример:

https://github.com/NLog/NLog.Extensions.Logging/blob/master/examples/NetCore2/ConsoleExample/Program.cs

Где LoggerFactory создается с AddLogging(...) и где Runner зарегистрирован в ServiceCollection для внедрения зависимостей. При создании экземпляра Runner внедрение-зависимости автоматически предоставит ILogger в качестве параметра-конструктора.

0 голосов
/ 08 января 2020

Обратитесь по этому URL. Вы получите полное представление о Nlog в asp net core

https://www.c-sharpcorner.com/article/introduction-to-nlog-with-asp-net-core2/

...