Вопрос

Я разрабатываю собственное решение SharePoint, состоящее из функции и задания таймера (которое создается функцией в FeatureActivated).В своем решении я хочу использовать log4net для ведения журналов (я знаю о ULS).

С log4net в самой фиче все нормально (просто поместил log4net.config рядом с web.config и все нормально), но совершенно не представляю, как инициализировать log4net из задания таймера (учитывая, что он запускается не IIS, а ОСВТАЙМЕР).

Может кто-нибудь, пожалуйста, помогите мне найти ответы на вопросы:

  1. Где хранить log4net.config и как передать его в задание?
  2. Нужно ли мне инициализировать log4net каждый раз, когда вызывается метод Execute()?

Спасибо!

Это было полезно?

Решение

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

1) Хорошим местом для хранения файла конфигурации будет папка внутри 12 ульев.Возможно папка ваша фича.Поскольку путь к этому файлу не изменится, на него будет легко ссылаться с помощью средства ведения журнала.

2) Я думаю, вам придется каждый раз инициализировать регистратор, поскольку SPJobDefinition (класс задания таймера) хранится в базе данных, когда он не запускается.Функциональность хранения задания таймера в базе данных обеспечивается базовым классом SPJobDefinition. SPPersistedObject.Переменные-члены класса, унаследованного от SPPersistedObject, которые должны храниться вместе с классом в базе данных, должны быть помечены знаком [Persisted] атрибут.Но насколько мне известно, постоянные объекты могут быть только элементарными типами данных (int, long, string,...).

Таким образом, сохранение объекта log4net Logger в базе данных не будет работать или, по крайней мере, не поддерживается.Поэтому каждый раз, когда ваше задание загружается из базы данных, объект Logger необходимо инициализировать заново.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top