2008-10-20 14 views
10

Ich bin auf der Suche nach Best Practices für die Integration von log4net in SharePoint für Web-Anfrage, Feature-Aktivierung und alle Timer-Sachen.SharePoint und Log4Net

Ich habe mehrere Teilprojekte in meiner Farm, und ich möchte nur eine Log4Net.config-Datei haben.

[Bearbeiten]
Nicht nur muss ich log4net für die Web-Anwendung konfigurieren, die (ich verwende global.asax einfach zu tun ist, und eine log4net.config Datei, kann ich so Protokolleinstellungen ändern withtout Nachladen die Webapp), aber ich brauche auch asynchrone Ereignisse protokollieren:

  • Event-Handler (wie ItemAdded)
  • Timer Jobs
  • ...
+0

Haben Sie daran gedacht, sich in die SharePoint-Protokolle einzuloggen? – Nat

+0

Ja. Aber ich möchte verschiedene Protokolldateien für jedes Projekt haben oder eine zentrale Datenbank für Protokolle mit einer einfachen Webanwendung haben, um diese Protokolle zu sehen, ohne Zugriff auf ULS-Protokolle zu haben. – Nico

Antwort

0

Sie könnten die Konfigurationsdatei als Teil des/der Lösungspakets in die 12-Struktur freigeben (verwenden Sie STSDev, um beliebige Pakete zu erstellen). Dadurch erhalten Sie einen festgelegten Speicherort für die Konfiguration, und alle Änderungen daran können auf kontrollierte Weise freigegeben werden (d. H. Keine manuelle Bearbeitung erforderlich ist, führen Sie nur einen Rollback durch und installieren Sie die Lösung erneut).

1

Zuerst müssen Sie die Datei web.config ändern, in der sich Ihr virtuelles SharePoint-Verzeichnis befindet. Dies liegt daran, dass Sie SafeControl-Einträge hinzufügen müssen, um der log4net-Assembly zu vertrauen. Sie können die web.config programmgesteuert mithilfe der SPWebConfigModification-Klasse in einem Feature-Empfänger aktualisieren. Da Sie sowieso web.config ändern müssen, sollten Sie in Erwägung ziehen, Ihre log4net-Konfiguration in das System zu integrieren und keine externe log4net-Konfiguration einzurichten.

Wenn Sie jedoch nach wie vor, dies tun möchte, kann es funktionieren, wenn Sie die folgenden Funktionen der Datei web.config hinzufügen:

<configuration ...> 
    ... 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    </configSections> 
    <log4net configSource="log4Net.config"> 
    ... 
</configuration> 

Die log4net.config Datei sollte dann in der Lage sein, neben leben Ihre web.config. Wie Nat sagt, könnten Sie diese Datei als Lösungspaket bereitstellen.

Angenommen, Sie versuchen, eine minimale Vertrauensstellung auszuführen, müssen Sie Ihre Code Access Security-Datei aktualisieren, um auch die log4net-Assemblys einzuschließen. Ihr gesamter benutzerdefinierter SharePoint-Code sollte dann automatisch Ihre log4net-Konfiguration verwenden.

+0

danke, aber das hilft mir nur für den "Web" -Teil von SharePoint. Allerdings muss ich auch alles asynchron protokollieren, wie Event-Handler, Feature, Jobs, etc .. – Nico

9

Ich habe dies kürzlich implementiert und kam mit einer Lösung, die für mich funktionierte.

Stellen Sie Ihre log4net-Konfigurationsdatei in der 12-Hive und der log4net-DLL mithilfe einer global definierten Lösung im GAC bereit. Dann initialisieren Sie in Ihrem Anwendungscode log4net explizit vom Speicherort Ihrer globalen Datei. Auf diese Weise können Sie Funktionsempfänger, Timer-Jobs und Webanwendungscode protokollieren.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = 
    @"C:\Program Files\Common Files\Microsoft Shared\" + 
    @"Web Server Extensions\12\CONFIG\log4net.config", Watch = true)] 

siehe hier http://www.codeproject.com/KB/sharepoint/SharepointLog4Net.aspx

+1

downvoted b/c Ihr Link geht nicht wirklich zu codeproject.com – Chloraphil

+0

@Chloraphil Ops Link ist behoben – TheCodeKing

+3

Nur ein kleiner enchancment: Ich würde empfehlen, SPUtility.GetGenericSetupPath (@ "CONFIG \ log4net.config") zu verwenden, um den SharePoint-Pfad zu erhalten. In diesem Fall spielt es keine Rolle, ob SharePoint auf C-Laufwerk ist oder nicht. –

0

ich log4net Funktion entwickelt und in einer WSP-Datei verpackt. Der Feature-Empfänger fügt der Datei "web.config" ein httpmodul hinzu, und das httpmodul lädt die Datei log4net.config aus dem Layoutverzeichnis, wenn das Start-Ereignis der Anwendung im HTTP-Modul ausgelöst wird.