log4net сопоставление пользовательских данных с полем в базе данных

1

Я переношу из Enterprise Library, и его Write() api позволяет нам указывать такие вещи, как Категория, Уровень важности, Заголовок и Приоритет.

В этом конкретном примере я хотел бы зарегистрировать в поле базы данных заданное пользователем значение для категории. например, в онлайн-корзине покупок, я хочу поместить такие категории, как [Камеры], [Ноутбуки], [Маршрутизаторы], [Аккаунт], [Заказы], [Доставка] и т.д.

Я знаю, что в log4net есть поле свойств, и мы делаем это уже в нашем конфиге для отображения в базу данных:

<parameter>
  <parameterName value="@MachineName" />
  <dbType value="String" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%property{log4net:HostName}" />
  </layout>
</parameter>

Я хочу, чтобы мой Api выглядел примерно так:

public class LogService
{
   public LogService() 
   {
      _log = LogManager.GetLogger(this.GetType());
   }

   public void WriteDebug(string message, string category)
   {
     _log.Debug(message);
   }
}

Могу ли я сделать это, было бы безопасно? или есть другой способ?

public void WriteDebug(string message, string category)
{
    ThreadContext.Properties["Category"] = category
    _log.Debug(message);
    ThreadContext.Properties["Category"] = "";
}

У нас есть много асинхронного кода в нашей базе кода приложения... поэтому я волнуюсь, что это вообще не потокобезопасно.

Теги:
database
category
log4net

1 ответ

1

log4net.ThreadContext безопасен для многопоточных операций и предоставляет местоположение для конкретной информации, относящейся к потоку. Вы также можете указать идентификатор потока/имя потока в вашем шаблоне PatternLayout для лучшего понимания. В этом же макете содержатся все необходимые свойства, как указано имя узла. Если вы хотите подключиться к базе данных, используйте AdoNetAppender.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню