10

我正在寻找将 log4net 集成到 SharePoint 以进行 Web 请求、功能激活和所有计时器的最佳实践。

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

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

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

4 回答 4

9

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

使用全局范围的解决方案将 log4net 配置文件部署到 12 hive 并将 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

于 2009-11-19T23:08:35.087 回答
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 配置。

于 2008-10-21T16:59:57.310 回答
0

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

于 2008-10-20T20:06:46.513 回答
0

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

于 2010-02-08T18:03:54.397 回答