我正在寻找将 log4net 集成到 SharePoint 以进行 Web 请求、功能激活和所有计时器的最佳实践。
我的农场中有几个子项目,我希望只有一个 Log4Net.config 文件。
[编辑]
我不仅需要为 Web 应用程序配置 log4net,这很容易做到(我使用 global.asax 和 log4net.config 文件,因此我可以修改日志设置而无需重新加载 webapp),而且我还需要记录异步事件:
- 事件处理程序(如 ItemAdded)
- 计时器作业
- ...
我正在寻找将 log4net 集成到 SharePoint 以进行 Web 请求、功能激活和所有计时器的最佳实践。
我的农场中有几个子项目,我希望只有一个 Log4Net.config 文件。
[编辑]
我不仅需要为 Web 应用程序配置 log4net,这很容易做到(我使用 global.asax 和 log4net.config 文件,因此我可以修改日志设置而无需重新加载 webapp),而且我还需要记录异步事件:
我最近实现了这一点,并提出了一个对我有用的解决方案。
使用全局范围的解决方案将 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
首先,您需要修改 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 配置。
您可以将配置文件作为解决方案包的一部分发布到 12 个配置单元(使用STSDev)来创建任何包)。这将为您提供配置的设置位置,并且可以以受控方式发布对它的任何更改(即无需手动编辑,只需回滚并重新安装解决方案)。
我开发了一个 log4net 功能并将其打包在一个 wsp 文件中。当在 http 模块中引发应用程序启动事件时,功能接收器将 httpmodule 添加到 web.config 并且 httpmodule 从布局目录加载 log4net.config。