Как настроить поставщика журналов событий EventLog через файл appsettings.json?C#

Место общения программистов C#
Ответить
Anonymous
 Как настроить поставщика журналов событий EventLog через файл appsettings.json?

Сообщение Anonymous »

В консольном приложении .net core 6 я создаю сборщик хостов

Код: Выделить всё

var builder = Host.CreateDefaultBuilder(args);
Это дает мне экземпляр HostBuilder с фабрикой журналирования, настроенной для поставщиков консоли, отладки, журнала событий и источников событий, а также поставщиков конфигурации для переменных пользовательской/системной среды, appsettings.json, appsettings..json и т. д.
Я могу внедрить ILogger или ILoggingFactory в свой класс и писать всем поставщикам журналов с помощью функции ILogger.Log.
/>

Код: Выделить всё

public class BusinessLogic
{
private IHostEnvironment _env;
private ILogger _logger;

public BusinessLogic(
IHostEnvironment env,
ILoggerFactory loggerFactor)
{
_env = env;

_logger = loggerFactor.CreateLogger();
}

public void Run()
{
foreach (var level in Enum.GetValues())
{
_logger.Log(level, $"Test logging at level {level}.");
}

Console.WriteLine("Hello, World!  Press any key...");
Console.ReadLine();
}
}
Теперь я хочу настроить имя приложения журнала событий и имя источника, в который будет записывать поставщик журнала событий. Я бы не хотел жестко кодировать это, поэтому я надеялся сделать это через файл appsettings.json. Кажется, я не могу заставить это подействовать. Мой файл appsettings.json выглядит следующим образом:

Код: Выделить всё

{
"Logging":
{
//Settings for the windows event log logging provider
"EventLog":
{
"LogName": "Application",
"SourceName": "MySource",

"LogLevel":
{
"Default": "Trace"
}
}
}
}
Вышеуказанные настройки приложения не влияют, поэтому я решил попробовать добавить нового поставщика EventLog и передать ему конфигурацию.

Код: Выделить всё

var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureAppConfiguration((context, builder) =>
{
var eventLogConfiguration = context.Configuration.GetSection("Logging:EventLog").Get();
builder.AddEventLog(eventLogConfiguration);
});
Это тоже не сработало, поэтому я попробовал очистить поставщиков журналов на случай, если добавление дубликатов будет проблемой.

Код: Выделить всё

var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureAppConfiguration((context, builder) =>
{
builder.ClearProviders();
var eventLogConfiguration = context.Configuration.GetSection("Logging:EventLog").Get();
builder.AddEventLog(eventLogConfiguration);
});
Это работает, но что, если я хочу сохранить всех остальных существующих поставщиков? Могу ли я просто заменить его или каким-то образом применить конфигурацию к существующему провайдеру, или есть какой-то другой/лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/745 ... -json-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»