我正在尝试使用log4net写入Windows Server 2008 SP1上IIS7下的客户事件日志。但是,帐户似乎无权写入事件日志。有没有人有任何建议?
答案 0 :(得分:63)
问题可能是您的事件来源。您必须先创建一个事件源,然后才能写入事件日志(如果不这样做,事件日志对象会在您第一次写入日志时“自动”为您创建一个事件源。)
您必须具有较高的权限才能创建事件日志源。在我的一些网络应用程序中,我已将代码创建到我的设置中的事件源(安装程序以管理员身份运行,所以我始终保证能够创建源代码。)
您只需创建一次源。之后,您的ASP.Net应用程序应具有足够的权限来写入指定您创建的源(或源)的条目。
您可以在设置中使用EventLogInstaller来创建源,或者您可以编写一个小实用程序来以管理员身份调用EventLog.CreateEventSource()。
我会告诉你两种方式:
// You would do this one from within an Installer class in a setup:
private void InstallEventLog()
{
EventLogInstaller logInstaller;
//Create an instance of an EventLogInstaller.
logInstaller = new EventLogInstaller();
//Set the source name of the event log.
logInstaller.Source = "TheEventSourceName";
Installers.Add(logInstaller);
}
方法2:只需以管理员身份调用一次CreateEventSource(例如,您可以将以下代码放入控制台应用程序中,并以管理员身份运行控制台应用程序
EventLog.CreateEventSource("TheSourceName", "Application");
加成: 如果您的服务器上安装了Powershell,则可以从Powershell命令提示符处执行此操作: (确保以管理员身份运行Powershell)
[system.Diagnostics.EventLog]::CreateEventSource("SourceName", "Application")
跳跃帮助
答案 1 :(得分:15)
将ASPNET权限授予事件日志。
运行 - >注册表 - >浏览
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\Eventlog
右键单击选择权限并为ASPNET帐户提供完全控制
答案 2 :(得分:7)
IIS 8权限解决答案
我很懒,并没有在我的代码中创建特殊日志,而是使用了:
System.Diagnostics.EventLog.WriteEntry(“MyAppName”,“Bla Bla SQL” 错误:“+ sx.Message”;
只是为了完成Michael的回答 在IIS8中,IIS在运行服务器端代码时使用的用户是:IIS_IUSRS
(实际上它更复杂,因为IIS_IUSRS中有虚拟帐户但他们从该帐户获得权限,请参阅IIS_IUSRS and IUSR permissions in IIS8表格更多详情)
该用户在此注册表节点上只需要READ权限:
HKLM \ CURRENTCONTROLSET \ SYSTEM \服务\事件日志\安全
这样做的原因是,在创建新日志源之前,系统想要检查它是否存在,因此需要读取源名称。
此外,如果您使用的是visual studio的iis express,它将在您的个人凭据下运行,因此如果您没有上述注册表节点的读访问权限,则在视觉调试时也需要添加它工作室。
(如果管理员拥有该节点的权限,并且您在该组中,那还不够,您需要以管理员身份运行visual studio - 这只能从visual studio快捷方式而不是sln快捷方式中运行)
另一个注意事项:如果计算机位于域中,并且在编辑注册表权限时找不到IIS_IUSRS帐户,则可能是您查找了错误的“位置”,而是在域活动目录中搜索该帐户本地计算机)
答案 3 :(得分:2)
我认为@Michael Kniskern的一个更好的例子是:
...注册表编辑
HKEY_LOCAL_MACHINE \系统 \ CURRENTCONTROLSET \服务 \事件簿 \ your_new_application_log
完全控制为应用程序创建的特定应用程序日志(在此示例中,右键单击your_new_application_log并在其中设置权限)。创建新日志名称后,它将显示在嵌套在eventlog节点下的注册表中。
答案 4 :(得分:0)
我正在使用IIS 10,并将池标识设置为“本地系统”