chr*_*dev 5 log4net iis-7 event-log
这可能不是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.
Run Code Online (Sandbox Code Playgroud)
我想我可以将其缩小到注册表权限问题我已授予Everyone对以下注册表项和子项的完全权限,但它也不起作用: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
自定义标识是以下组的成员:
我也看到了以下似乎问同样问题的问题.微软的文章似乎暗示它可能是事件日志中ACL的问题,并提供了如何更改SSDL的示例,但我宁愿避免这种情况.
编辑:我有另一台服务器正在运行,其中日志正在填充正常.自定义标识是管理员的成员所以我撤销了它并重新启动,试图故意破坏它,但我不能.两个框上的配置相同,并且用于运行MSI的相同标识创建了注册表项.在两者上运行procmon(在执行IISReset并再次启动应用程序池之后)以检查注册表活动.奇怪的是 - 在可行的方框中,您在错误的位置(应用程序和不同的自定义事件日志"MyCompany")获取477名称未找到的事件源记录.没有命中它记录的地方是"MyCompany\MyCompany.SiteCore".虽然在破坏的盒子上,它似乎确实要求读取正确的密钥(尽管只有6次)但是你得到了Log4Net注册表访问错误.
据我了解,EventStore 存储在注册表中,因此您只需要对注册表的写入权限即可创建或删除 EventStore。这通常只需要一次,并且大多数应用程序将其创建为安装过程的一部分,以便应用程序在正常执行期间不需要以管理员身份运行。
但是,您的错误消息(在问题中)包括方法DeleteEventSource,我可以从中推断/猜测 EventSource 确实存在,但在某种程度上是错误的。因此,也许当前已将其注册为写入名为 MyCompany 的事件日志,并且您现在尝试将其更改为“MyCompany\MyCompany.SiteCore”,这要求您删除旧的事件源并创建一个新的事件源。
因此,听起来您的安装例程正在创建一个与您的应用程序实际使用的事件源不同的事件源。
如果这没有帮助,那么我建议启用Log4net 的内部日志记录(但显然不是事件日志),这可能会给您提供更多信息。
授予注册表项完全权限是不够的。据微软称
要在 Windows Vista 及更高版本或 Windows Server 2003 中创建事件源,您必须具有管理权限。
提出此要求的原因是必须搜索所有事件日志(包括安全性)以确定事件源是否唯一。从Windows Vista开始,用户无权访问安全日志;因此,会抛出 SecurityException。
从 Windows Vista 开始,用户帐户控制 (UAC) 确定用户的权限。如果您是内置管理员组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌。默认情况下,您具有标准用户角色。要执行访问安全日志的代码,您必须首先将权限从标准用户提升到管理员。您可以在启动应用程序时执行此操作,方法是右键单击应用程序图标并指示您要以管理员身份运行。
| 归档时间: |
|
| 查看次数: |
3716 次 |
| 最近记录: |