Свойства ILogger BeginScopeC#

Место общения программистов C#
Ответить
Anonymous
 Свойства ILogger BeginScope

Сообщение Anonymous »

Как правильно добавить свойства в ILogger с использованием метода BeginScope в следующем сценарии?
Клиент класса ниже необходимо добавить клиент .Name как свойство каждого журнала. Например, класс имеет только один метод client.ByuProduct("product1"), но его нужно будет использовать в любом другом методе.

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

public class Client
{
private readonly ILogger logger;
public string Name { get; set; }

private Dictionary loggedProperties = new();

public Client(ILogger logger, string name)
{
this.logger = logger;
Name = name;
// This is wrong unless the separate instances of logger is created or each Client instance
// loggerScope = logger.BeginPropertyScope(("customerName", Name));
loggedProperties.Add("ClientName", name);
}

/// 
/// Simulating that product was bought by the client
/// 
/// 

public void BuyProduct(string productId)
{
this.logger.LogInformationWithProps(loggedProperties, "Buying product:{ProductId}", productId);
}
}
Я создал метод расширения LogInformationWithProps, и он работает нормально.

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

/// 
/// Logs message with properties/structured logging
/// 
/// 

/// 
/// 
/// The identifier for the scope.
/// The type of the state to begin scope for.
public static void LogInformationWithProps(this ILogger logger, TState state, string? message, params object?[] args)
{

using (var scope = logger.BeginScope(state))
{
logger.Log(LogLevel.Information, message, args);
}
}
Меня интересует производительность и лучшие практики. У меня будет максимум 1–9 экземпляров класса Client. Должен ли я рассмотреть возможность создания для каждого экземпляра клиента собственного экземпляра журнала, а в конструкторе следует вызвать BeginScope с помощью clint.Name? Я предполагаю, что создание журнала для каждого экземпляра клиента — не лучшая практика.


Подробнее здесь: https://stackoverflow.com/questions/790 ... beginscope
Ответить

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

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

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

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

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