SharePoint和Log4Net

时间:2008-10-20 19:55:39

标签: sharepoint logging moss log4net

我正在寻找将log4net集成到SharePoint以获取Web请求,功能激活和所有计时器内容的最佳实践。

我的服务器场中有几个子项目,我希望只有一个Log4Net.config文件。

[编辑]
我不仅需要为Web应用程序配置log4net,这很容易(我使用global.asax和log4net.config文件,因此我可以在不重新加载webapp的情况下修改日志设置),但我还需要异步登录事件:

  • 事件处理程序(如ItemAdded)
  • 计时器作业
  • ...

4 个答案:

答案 0 :(得分:9)

我最近实现了这个,并提出了一个对我有用的解决方案。

使用全局范围的解决方案将log4net配置文件部署到12个配置单元并将log4net dll部署到GAC中。然后在您的应用程序代码中,从全局文件的位置显式初始化log4net。这允许您记录功能接收器,计时器作业和Web应用程序代码。

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

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

答案 1 :(得分:1)

首先,您需要修改SharePoint虚拟目录所在的web.config。这是因为您需要添加SafeControl条目以信任log4net程序集。您可以使用功能接收器中的SPWebConfigModification类以编程方式更新web.config。因为你必须修改web.config,你可能要考虑在里面包含你的log4net配置而不是设置外部log4net配置。

但是,如果你仍然喜欢这样做,那么如果你将以下内容添加到web.config文件中它可能会有效:

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

然后,log4net.config文件应该能够与您的web.config一起存在。正如Nat所说,您可以将此文件部署为解决方案包。

假设您尝试运行最小信任,则需要更新代码访问安全性文件以包含log4net程序集。然后,您的所有自定义SharePoint代码都应自动使用您的log4net配置。

答案 2 :(得分:0)

您可以将配置文件作为解决方案包的一部分发布到12个配置单元(使用STSDev)来创建任何包)。这将为您提供配置的设置位置,并且可以以受控方式释放对其的任何更改(即,无需手动编辑,只需回滚并重新安装解决方案)。

答案 3 :(得分:0)

我开发了一个log4net功能并将其打包在一个wsp文件中。功能接收器在web.config中添加httpmodule,当http模块中引发应用程序启动事件时,httpmodule从layouts direcory加载log4net.config。