Задание таймера Sharepoint и log4net
-
07-07-2019 - |
Вопрос
Я разрабатываю собственное решение SharePoint, состоящее из функции и задания таймера (которое создается функцией в FeatureActivated).В своем решении я хочу использовать log4net для ведения журналов (я знаю о ULS).
С log4net в самой фиче все нормально (просто поместил log4net.config рядом с web.config и все нормально), но совершенно не представляю, как инициализировать log4net из задания таймера (учитывая, что он запускается не IIS, а ОСВТАЙМЕР).
Может кто-нибудь, пожалуйста, помогите мне найти ответы на вопросы:
- Где хранить log4net.config и как передать его в задание?
- Нужно ли мне инициализировать log4net каждый раз, когда вызывается метод Execute()?
Спасибо!
Решение
Я давно не использовал log4net, но, если я правильно помню, вы можете сохранить файл конфигурации где угодно и позволить log4net загружать его оттуда во время инициализации регистратора.
1) Хорошим местом для хранения файла конфигурации будет папка внутри 12 ульев.Возможно папка ваша фича.Поскольку путь к этому файлу не изменится, на него будет легко ссылаться с помощью средства ведения журнала.
2) Я думаю, вам придется каждый раз инициализировать регистратор, поскольку SPJobDefinition (класс задания таймера) хранится в базе данных, когда он не запускается.Функциональность хранения задания таймера в базе данных обеспечивается базовым классом SPJobDefinition. SPPersistedObject.Переменные-члены класса, унаследованного от SPPersistedObject, которые должны храниться вместе с классом в базе данных, должны быть помечены знаком [Persisted]
атрибут.Но насколько мне известно, постоянные объекты могут быть только элементарными типами данных (int, long, string,...).
Таким образом, сохранение объекта log4net Logger в базе данных не будет работать или, по крайней мере, не поддерживается.Поэтому каждый раз, когда ваше задание загружается из базы данных, объект Logger необходимо инициализировать заново.