在Windows Server 2008 IIS7上写入ASP.NET中的事件日志

时间:2009-04-03 00:59:40

标签: asp.net iis iis-7

我正在尝试使用log4net写入Windows Server 2008 SP1上IIS7下的客户事件日志。但是,帐户似乎无权写入事件日志。有没有人有任何建议?

5 个答案:

答案 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表格更多详情)

该用户在此注册表节点上只需要R​​EAD权限:

  

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,并将池标识设置为“本地系统”

请参阅参考资料:https://stackoverflow.com/a/9067391/9975799