2008-10-20 26 views
10

Web isteği, özellik etkinleştirme ve tüm zamanlayıcı şeyler için log4net'i SharePoint'e entegre etmek için en iyi uygulamaları arıyorum.SharePoint ve Log4Net

Çiftliğimde birkaç tane alt projem var ve yalnızca bir tane Log4Net.config dosyasına sahip olmak istiyorum.

[Düzenle]
Sadece ben (ı Global.asax kullanın ve bir log4net.config dosyası, bu yüzden yeniden withtout günlük ayarlarını değiştirebilirsiniz yapmak kolaydır web uygulaması için Log4net yapılandırmanız gerekir web uygulaması), ama aynı zamanda asenkron olayları günlüğe gerekir: ... ItemAdded gibi

  • Olay Handler()
  • Zamanlayıcı İşler
+0

SharePoint günlüklerine giriş yapmayı düşündünüz mü? – Nat

+0

Evet. Ancak, her proje için farklı log dosyaları alabilmem veya basit bir webapp ile loglar için merkezi bir veri tabanına sahip olmak istiyorum ki bu loglar ULS kayıtlarına erişim vermek zorunda kalıyor. – Nico

cevap

0

Konfigürasyon paketinin/paketlerinin bir parçası olarak herhangi bir paket oluşturmak için config dosyasını 12 kovana (STSDev kullanın) bırakabilirsiniz. Bu, yapılandırma için ayarlanmış bir konum sağlar ve buradaki herhangi bir değişiklik kontrollü bir şekilde serbest bırakılabilir (diğer bir deyişle, manuel düzenleme gereği yoktur, yalnızca geri sarın ve çözümü yeniden yükleyin).

1

Öncelikle, SharePoint sanal dizininizin bulunduğu web.config dosyasını değiştirmeniz gerekecektir. Bunun nedeni, log4net aksamına güvenmek için SafeControl girişlerini eklemeniz gerektiğidir. Bir özellik alıcısındaki SPWebConfigModification sınıfını kullanarak web.config dosyasını program aracılığıyla güncelleyebilirsiniz. Yine de web.config dosyasını değiştirmeniz gerektiğinden, log4net yapılandırmanızı dahil etmeyi düşünmeyi ve harici bir log4net yapılandırması kurmayı düşünebilirsiniz.

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

log4net.config dosya daha sonra yan yana yaşamak gerekir: Hala bu yapmak istiyorum eğer web.config dosyasına aşağıdaki eklerseniz

Ancak, işe yarayabilir web.config. Nat'un dediği gibi, bu dosyayı bir çözüm paketi olarak dağıtabilirsiniz. En az bir güvene sahip olduğunuz varsayılırsa, Code Access Security dosyanızı log4net düzeneklerini de içerecek şekilde güncelleştirmeniz gerekir. Tüm özel SharePoint kodunuz, otomatik olarak log4net yapılandırmanızı kullanmalıdır.

+0

teşekkürler, ancak bu yalnızca SharePoint'in "web" bölümü için bana yardımcı oluyor. Ancak, aynı zamanda, olay işleyicisi, özellik, iş, vb gibi, eşzamansız olarak gerçekleşen her şeyi günlüğe kaydetmem gerekiyor ... – Nico

9

Bunu yakın zamanda uygulamaya koydum ve benim için çalışan bir çözüm buldu.

Log4net yapılandırma dosyanızı, global olarak kapsamlı bir çözüm kullanarak GAC'a 12 kovana ve log4net dll'ye dağıtın. Daha sonra, uygulama kodunuzda, log4net dosyasını global dosyanızın konumundan açıkça başlatırsınız. Bu özellik alıcı, zamanlayıcı işleri ve web uygulama kodunu kaydetmenizi sağlar.

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

Bir log4net özelliğini geliştirmiş ve bir wsp dosyasında paketlenmiş http://www.codeproject.com/KB/sharepoint/SharepointLog4Net.aspx

+1

downvoted b/c bağlantınız aslında codeproject.com'a gitmiyor – Chloraphil

+0

@Chloraphil ops bağlantısı düzeltildi – TheCodeKing

+3

Sadece küçük enchancment: SharePoint yolunu almak için SPUtility.GetGenericSetupPath (@ "CONFIG \ log4net.config") kullanmanızı öneririm. Bu durumda, SharePoint C sürücüsünde olup olmadığı önemli değildir. –

0

buraya bakın. Özellik alıcısı web.config dosyasına bir httpmodule ekler ve httpmodule uygulama başlatma olayı yükseltildiğinde, httpmodule log4net.config düzenini dimicory öğesinden yükler.