Sharepoint Timer Job y log4net
timer-jobs (1)
Ha pasado un tiempo desde que utilicé log4net, pero si recuerdo bien, podría almacenar su archivo de configuración donde quiera y dejar que log4net lo cargue desde allí durante la inicialización del registrador.
1) Un buen lugar para almacenar el archivo de configuración sería la carpeta dentro de las 12 colmenas. Quizás la carpeta de tu característica. Como la ruta a este archivo no cambia, debería ser fácil referenciarlo con el registrador.
2) Creo que tendrá que inicializar el registrador cada vez que SPJobDefinition (clase de trabajo del temporizador) se almacena dentro de la base de datos cuando no se ejecuta. La funcionalidad para almacenar el trabajo del temporizador en la base de datos proviene de la clase base SPPersistedObject de SPJobDefinition . Las variables miembro de una clase heredada de SPPersistedObject, que debe almacenarse junto con la clase en la base de datos, deben estar marcadas con un atributo [Persisted]
. Pero, por lo que sé, los objetos persistentes solo pueden ser tipos de datos elementales (int, long, string, ...).
Por lo tanto, almacenar un objeto log4net Logger dentro de la base de datos no funcionará o al menos no es compatible. Por lo tanto, cada vez que se carga su trabajo desde la base de datos, el objeto Logger debe inicializarse de nuevo.
Estoy desarrollando una solución de SharePoint personalizada que consiste en una función y un trabajo del temporizador (que se crea mediante la característica en FeatureActivated). En mi solución, quiero usar log4net para el registro (sé sobre ULS).
Todo está bien con log4net en la función en sí misma (simplemente coloca log4net.config cerca de web.config y todo está bien), pero no tengo ni idea de cómo inicializar log4net desde el trabajo del temporizador (teniendo en cuenta que no es ejecutado por IIS sino por OSWTIMER).
¿Alguien puede ayudarme a encontrar respuestas para las preguntas?
- Dónde almacenar log4net.config y cómo pasarlo al trabajo?
- ¿Debo inicializar log4net cada vez que se llama al método Execute ()?
¡Gracias!