2009-10-28 4 views
1

Je développe une solution SharePoint personnalisée composée d'une fonction et d'un travail de minuteur (créé par la fonction dans FeatureActivated). Dans ma solution, je souhaite utiliser log4net pour la journalisation (je connais l'ULS). Tout va bien avec log4net dans la fonction elle-même (juste placé log4net.config près de web.config et tout va bien), mais je n'ai aucune idée de comment initialiser log4net du travail du minuteur (en tenant compte du fait qu'il ne fonctionne pas par IIS mais par OSWTIMER).Sharepoint Timer Job et log4net

Quelqu'un peut-il me s'il vous plaît aider à trouver des réponses aux questions suivantes:

  1. Où stocker log4net.config et comment passer à l'emploi?
  2. Ai-je besoin d'initialiser log4net chaque fois que la méthode Execute() est appelée?

Merci!

Répondre

2

Cela faisait un certain temps que j'ai utilisé log4net mais si je me souviens bien, vous pouvez stocker votre fichier de configuration où vous voulez et laisser log4net le charger à partir de là lors de l'initialisation de l'enregistreur.

1) Un bon endroit pour stocker le fichier de configuration serait le dossier dans les 12 ruches. Peut-être le dossier de votre fonctionnalité. Comme le chemin vers ce fichier ne changera pas, il devrait être facile de le référencer avec l'enregistreur.

2) Je pense que vous devrez initialiser l'enregistreur à chaque fois que le SPJobDefinition (minuterie classe d'emploi) est stocké dans la base de données quand il ne fonctionne pas. La fonctionnalité permettant de stocker le travail du minuteur dans la base de données provient de la classe de base SPJobDefinition SPPersistedObject. Les variables membres d'une classe héritée de SPPersistedObject, qui doivent être stockées avec la classe dans la base de données, doivent être marquées avec un attribut [Persisted]. Mais pour autant que je sache, les objets persistants ne peuvent être que des types de données élémentaires (int, long, string, ...).

Le stockage d'un objet logger Log4net dans la base de données ne fonctionnera donc pas ou ne sera pas pris en charge. Ainsi, chaque fois que votre travail est chargé à partir de la base de données, l'objet Logger doit être initialisé à nouveau.

+0

Merci, Flo! Très utile. Mais comment passeriez-vous le chemin à log4net.config (disons qu'il a moins de 12 ruches) au travail? Je suis relativement nouveau sur SharePoint mais pour autant que je sache, le travail peut être exécuté sur une autre machine. –

+0

Oui, vous avez raison, vous ne pouvez pas définir sur quel serveur le travail sera exécuté, mais il fonctionnera sur un serveur frontal. En appliquant votre fichier de configuration en tant que fonctionnalité via une solution SharePoint (fichier .wsp), il est configuré pour chaque serveur de fin de police de votre batterie. Ainsi, le travail peut accéder au fichier quel que soit le serveur sur lequel il est exécuté. – Flo