在C#中写入事件日志 - 在写入应用程序日志时是否需要使用EventLog.CreateEventSource?

时间:2011-10-31 23:26:48

标签: c# event-viewer event-log

当我使用以下代码写入应用程序事件日志时,一切正常:

EventLog log = new EventLog();
log.Source = "Application";
log.WriteEntry("test message", EventLogEntryType.Error);

当我使用来自MSDN和所有其他博客的代码时,我收到了安全错误(我猜是因为CreateEventSource引发了它)。

string sSource = "MyWebService";
string sLog = "myApplication";
string sMsg = errorMessage;

if (!EventLog.SourceExists(sSource))
   EventLog.CreateEventSource(sSource, sLog);

 EventLog.WriteEntry(sSource, sMsg, EventLogEntryType.Error);  

那么,如果我需要的是写入默认存在的应用程序日志,是否需要检查源是否存在?

写入EventViewer的正确方法是什么?

6 个答案:

答案 0 :(得分:7)

CreateEventSource方法在事件日志中创建一个新源,这允许您在应用程序自己的组中编写应用程序的日志,而不是写入通用的Application组。

也许您收到错误,因为您用于创建事件源的用户没有创建它的权限,如果您使用的是Vista / 7操作系统,请尝试以管理员身份运行您的程序。

登录事件查看器的正确方法取决于您的需求,如果您的应用程序生成大量日志消息并且您希望将此日志分组到特定于应用程序的容器中,则可能最好创建特定于应用程序的日志事件如果您的应用程序生成很少的日志消息并且不需要将它们组合在一起,则可以使用通用的Application日志事件源...

来源并写入日志。

答案 1 :(得分:2)

我建议您尝试log4net,以防您想要写入不同的来源(smtp,文件等)

http://logging.apache.org/log4net/release/config-examples.html#eventlogappender

对于网络应用:

一般用途:

winforms / windows服务的类似解决方案。

答案 2 :(得分:2)

您需要拥有管理员权限才能创建事件源。在第一个中,您没有使用自定义源。

答案 3 :(得分:1)

直接的WriteEntry将转到默认的应用程序源。 SourceExists和CreateEventSource是您要创建自己的自定义源,这将更容易在事件查看器中找到任何日志条目。

是的,您需要拥有创建客户事件源的权利,正如其他人所提到的那样。

答案 4 :(得分:0)

您需要管理员权限才能运行您的应用程序。

您可以运行您的应用程序 进入应用程序的调试文件夹,右键单击.exe文件并以管理员身份运行

您以管理员身份运行Visual Studio

答案 5 :(得分:-1)

您无需创建事件源。在生成与语言无关或具有替换的事件时,它可能是一个很大的优势,但它是可选的,至少对于.NET程序(BCL提供默认事件源)。