【发布时间】:2011-12-13 02:15:12
【问题描述】:
这可能不是 SiteCore 本身的问题,但为了完整起见,我已将其包含在内。我使用应用程序池的自定义标识在 IIS7 下运行 sitecore 6.3。我无法让 Sitecore 将其日志记录信息(使用默认的 log4net 设置)写入事件日志。我已经遵循了这里的建议:http://logging.apache.org/log4net/release/faq.html#Why%20doesn%27t%20the%20EventLogAppender%20work?,虽然当我将自定义身份设置为管理员组的成员时它工作正常,但我需要找到一种方法让它在没有这种安全黑客攻击的情况下在生产中工作。
奇怪的是,我有一个 MSI 来安装它(在管理员组成员的帐户下运行)并为我在事件日志中创建正确的注册表项,但尽管如此,我仍然得到当我使用自定义身份(不是管理员成员)运行应用程序时出现以下错误。
log4net:ERROR DOMConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogAppender]. Reported error follows.
System.Security.SecurityException: Requested registry access is not allowed.
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at System.Diagnostics.EventLog.GetEventLogRegKey(String machine, Boolean writable)
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly)
at System.Diagnostics.EventLog.DeleteEventSource(String source, String machineName)
at log4net.Appender.EventLogAppender.ActivateOptions()
at log4net.Repository.Hierarchy.DOMHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
The Zone of the assembly that failed was:
MyComputer
log4net:ERROR DOMConfigurator: Appender named [EventLogAppender] not found.
我认为我可以将其缩小到注册表权限问题,我授予所有人对以下注册表项和子项的完全权限,但它也不起作用:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
自定义身份是以下组的成员:
- 事件日志读取器
- IIS_USERS
- 性能监视器用户
我还看到了following question,它似乎在问同样的事情。 Microsoft 文章似乎暗示事件日志中的 ACL 可能存在问题,并提供了有关如何更改 SSDL 的示例,但我宁愿尽可能避免这种情况。
编辑: 我有另一台服务器正在运行,日志被很好地填充。自定义身份是管理员的成员,所以我撤销了它并重新启动,试图故意破坏它,但我不能。两个盒子上的配置相同,并且用于运行创建注册表项的 MSI 的身份相同。已在两者上运行 procmon(在执行 IISReset 并再次启动应用程序池之后)以检查注册表活动。奇怪的是 - 在有效的盒子上,您会在错误的地方(应用程序和不同的自定义事件日志“MyCompany”)获得 477 个名称未找到我的事件源的记录。它正在记录的位置“MyCompany\MyCompany.SiteCore”没有命中。虽然在损坏的盒子上,它似乎确实在请求读取正确的密钥(尽管只有 6 次),但随后您会收到 Log4Net 注册表访问错误。
【问题讨论】:
-
也许有一些额外的见解:由于某种莫名其妙的原因,我的安装程序随机创建的注册表子项(用于事件日志源名称)在 1 台服务器上消失了。它仍然在 regedit 中(我已经打开但没有刷新),当我点击它时弹出一条消息:“错误打开密钥”:[Keyname] 无法打开。一个错误是阻止此密钥被打开。详细:系统找不到指定的文件。 Log4Net 消息更改为:log4net:ERROR DOMConfigurator: Appender named [EventLogAppender] not found.