我正在寻找将log4net集成到SharePoint以获取Web请求,功能激活和所有计时器内容的最佳实践。
我的服务器场中有几个子项目,我希望只有一个Log4Net.config文件。
[编辑]
我不仅需要为Web应用程序配置log4net,这很容易(我使用global.asax和log4net.config文件,因此我可以在不重新加载webapp的情况下修改日志设置),但我还需要异步登录事件:
答案 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。